本文主要是介绍LintCode 最长无重复字符的子串,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
给定一个字符串,请找出其中无重复字符的最长子字符串。
例如,在”abcabcbb”中,其无重复字符的最长子字符串是”abc”,其长度为 3。
对于,”bbbbb”,其无重复字符的最长子字符串为”b”,长度为1。
从左向右扫描,遇到重复的字符时,从前面出现该字符的位置的下一个字符开始,重新扫描,直到扫描到最后。例如:
abcbdefgdk
字符 | a | b | c | b | d | e | f | g | d | k |
---|---|---|---|---|---|---|---|---|---|---|
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
第一轮:从0到2
第二轮:从2到7
第三轮:从5到9
class Solution:"""@param: s: a string@return: an integer"""def lengthOfLongestSubstring(self, s):# write your code heren=len(s)start=0 #记录每轮的开始位置repeat=0 #记录每轮出现重复的位置end=0 #记录每轮结束的位置length=0while(start<n):end=start while( end+1<n): #当每轮没扫描最后的时候if(s[end+1] not in s[start:end+1]):end+=1 #没重复就end+1else: #重复了就记录下这个重复的字符temp=s[start:end+1]breakif end<n-1: #有两种结束扫描的情况,一个是没扫到最后,那么就存在重复。另一种直接结束就可以了repeat=s[start:end+1].index(temp) # 找到重复字符在前面的位置,注意,这个repeat是从start开始的偏移量if end-start+1>length:length=end-start+1start=start+repeat+1 #更新start 继续扫描return length
这篇关于LintCode 最长无重复字符的子串的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!