LeetCode--003--無重復字符的最長子串
阿新 • • 發佈:2018-10-16
emp tar 註意 color 。。 urn etc col b+
問題描述:
給定一個字符串,找出不含有重復字符的最長子串的長度。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 無重復字符的最長子串是 "abc",其
長度為 3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 無重復字符的最長子串是 "b"
,其長度為 1。
示例 3:
輸入: "pwwkew" 輸出: 3 解釋: 無重復字符的最長子串是"wke"
,其長度為 3。 請註意,答案必須是一個子串,"pwke"
是一個子序列 而不是子串。
學業繁重,沒時間寫了。。。。。。
方法1:s="pwwkew" d={} ({"p":0,"w":1,"w":2,"k":3,"e":4,"w":5}) ,當s[i]在d中,start=d[s[i]] + 1從下一個位置開始,temp 存儲最大長度 temp=max(i-start+1,temp)
1 class Solution: 2 def lengthOfLongestSubstring(self, s): 3 """ 4 :type s: str 5 :rtype: int 6 """ 7 d={} 8 start = 0 9 temp = 0 10 for i in range(len(s)): 11 if s[i] in d and start <= d[s[i]]: 12 start = d[s[i]] + 1 13temp = max(temp,i-start+1) 14 d[s[i]] = i 15 return temp 16
方法2:
1 class Solution: 2 def lengthOfLongestSubstring(self, s): 3 """ 4 :type s: str 5 :rtype: int 6 """ 7 sub=‘‘ 8 sub_len=0 9 max_len=010 max_sub=‘‘ 11 for letter in s: 12 if letter in sub: 13 if sub_len>max_len: 14 max_len=sub_len 15 max_sub=sub 16 index=sub.index(letter) 17 sub=sub[index+1:]+letter 18 sub_len=sub_len-index 19 else: 20 sub=sub+letter 21 sub_len+=1 22 if sub_len>max_len: 23 max_len=sub_len 24 return max_len
方法3:
1 class Solution: 2 def lengthOfLongestSubstring(self, s): 3 """ 4 :type s: str 5 :rtype: int 6 """ 7 start = max_len = 0 8 used = {} 9 10 for i in range(len(s)): 11 if s[i] in used and start <= used[s[i]]: 12 start = used[s[i]] + 1 13 else: 14 max_len = max(max_len, i - start + 1) 15 used[s[i]] = i 16 17 return max_len
2018-10-15 22:43:21
LeetCode--003--無重復字符的最長子串