python输入多个字符串、输入最长的一串_无重复字符的最长子串(Python之暴力求解)...
無重復字符的最長子串(Python之暴力求解)
例題:
給定一個字符串,請你找出其中不含有重復字符的 最長子串 的長度。
示例:
(1)
輸入: “abcabcbb”
輸出: 3
解釋: 因為無重復字符的最長子串是 “abc”,所以其長度為 3。
(2)
輸入: “bbbbb”
輸出: 1
解釋: 因為無重復字符的最長子串是 “b”,所以其長度為 1。
輸入: “pwwkew”
輸出: 3
(3)
輸入: “pwwkew”
輸出: 3
解釋: 因為無重復字符的最長子串是 “wke”,所以其長度為 3。
請注意,你的答案必須是 子串 的長度,“pwke” 是一個子序列,不是子串。
分析:
要想求得最長無重復字符,那么我們需要遍歷這一字符串,例如示例三中“pwwkew”
在我們腦海里就是中就是先從序列為一的p開始遍歷一次累加字符串,只要累加的字符串無重復字母,那么就繼續累加,直到結束或者有重復字母為止,若遇到重復字母,那么就要從序列為2的w開始,繼續這樣操作下去,比較一下哪一種的長度最長,并輸出長度即可,雖然,這種方法比較容易理解,但是方法耗時較長!(在下一遍博客中將會介紹省時的一種方法,請游客們持續關注動態)
重要方法:
(1)在Python中有一個非常好的方法可以去除相等的字母或者數字等的方法,那就是集合,我們知道初中學過的集合是不允許有相同元素的,每個元素必須為一,Python中的集合也有這樣的性質。
(2)這個代碼需要用到倆從for循環來進行操作!(具體請參考代碼注釋)
代碼:
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
a1=set([]) #第一個空集合
a2=set([]) #第二個空集合
length=0 #計算最長子字符創長度
for i in range(len(s)):
a1=set(s[i])
a2=set(s[i])#將第i個元素分別添加到a1,a2集合當中去
for j in range(i+1,len(s)):
a1.add(s[j])
if len(a1)>len(a2):#這行代碼巧妙的運用來Python中的集合
a2.add(s[j])
else:
break
if len(a2)>length:
length=len(a2)
return length #返回最大無重復子字符串
#筆者認為難以理解的是兩個for循環語句中的內容,建議游客可以舉一個字符串來在草稿紙上認真根據代碼步驟來實現并加以理解,如果有不懂的地方或者錯誤的地方請大家留言!
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
總結
以上是生活随笔為你收集整理的python输入多个字符串、输入最长的一串_无重复字符的最长子串(Python之暴力求解)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存加速,工作如虎添翼
- 下一篇: 8G内存条单颗粒,性能独步全球,稳定可靠