题目描述:
Given a string, find the length of the longest substring without repeating characters.
Examples:
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 asubstring, "pwke"
is a subsequence and not a substring.
这个题想了好久才做出来,不应该。这种题应该问一下考官这些字符的范围。
最简单的思路就是每一个字母都往前找和它相同的,记下来最大的值即可,这样的时间复杂度是n*n,肯定超时。
思路其实就是和动态规划差不多,每一个字母看前面的最长无重复字母子串长度为多少,然后看自己与上一次出现的位置之差是多少,比较两者最小值就得到这个字母最长无重复子串长度了。
比如:
addsa
当考虑最后一个a的最长无重复子串长度时,s的最长无重复子串长度为2,那么2+1=3,上一个a和这个a之间位置的差为4,取较小值为3,所以包含最后一个a的最长无重复子串长度为3
dsaba
当考虑最后一个a的最长无重复子串长度时,b的最长无重复子串长度为2,那么4+1=5,上一个a和这个a之间位置的差为2,取较小值为2,所以包含最后一个a的最长无重复子串长度为2
代码如下: