Given a string, find the length of the longest substring without repeating characters.
Example
Given "abcabcbb", the answer is "abc", which the length is 3.
Given "bbbbb", the answer is "b", with the length of 1.
Given "pwwkew", the answer is "wke", with the length of 3.
Note that the answer must be a substring, "pwke" is a subsequence and not a substring.
本题需要找到一个字符串数组的最大不重复子字符串的长度。最简单的思路就是采用遍历的方法,先从某一个位置i开始,逐渐往后查找,已查找的位置为下标i~j,如果在某个位置找到了一个字符与前面的重叠,那么中断此次查找,用一个maxLen来记录最长的位置。如果未重叠的部分长度大于maxLen的长度的话,那么更新maxLen的值,接着令i=i+1,即从下一个位置开始新的查找。值得注意的是,如果开始查找的位置i大于字符长度减去maxLen的话,可以停止查找了,这可以减少不必要的工作。本次采用Python来解决这个问题。Python中的set()元素不会存储相同的元素,利用这个特点可以来判定i到j中有没有重复元素。
下面上代码,已通过leetcode的在线编译器。
class Solution(object):
def lengthOfLongestSubstring(self, s):
length=len(s)
maxLen=0
i,j=0,1
while i<length-maxLen:
j=i+1
c=set()
c.add(s[i])
while j<length:
if s[j] in c:
break
c.add(s[j])
j+=1
if maxLen<len(c):
maxLen=len(c)
i+=1
return maxLen