问题描述:
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例 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 13 temp = 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=0 10 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