无重复字符的最长子串
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "abcabcbb"
,没有重复字符的最长子串是 "abc"
,那么长度就是3。
给定 "bbbbb"
,最长的子串就是 "b"
,长度是1。
给定 "pwwkew"
,最长子串是 "wke"
,长度是3。请注意答案必须是一个子串,"pwke"
是 子序列 而不是子串。
基本思路:将没有出现过的字符及其位置放入hash表中,并计数将s[i]与hash表中的字符对比,如果出现过,更新hash表中的位 置,并重新计数,最后输出最大数值
1 class Solution: 2 def lengthOfLongestSubstring(self,s): 3 #基本思路:将没有出现过的字符及其位置放入hash表中,并计数 4 # 将s[i]与hash表中的字符对比,如果出现过,更新hash表中的位 5 # 置,并重新计数,最后输出最大数值 6 res=0 7 if s is None or len(s)==0:#如果字符串不存在或字符串为空的话 8 return res #直接返回0 9 ht={} 10 temp=0 11 start=0 12 for i in range(len(s)):#循环字符串中的每个字符 13 if s[i] in ht and ht[s[i]]>=start:#检查重复, 14 start=ht[s[i]]+1#记录当前字符串与hash表中重复字符的个数 15 temp=i-start+1#记录hash表中字符个数 16 ht[s[i]]=i#将没有出现过的字符及其位置存入hash表中 17 res=max(res,temp) 18 return res
测试用例:
1 s='pwwkew' 2 b=Solution.lengthOfLongestSubstring(1,s) 3 print(b)