Given a string, find the length of the longest substring without repeating characters.
Example 1:
Input: "abcabcbb"
Output: 3
Explanation: The answer is "abc"
, with the length of 3.
Example 2:
Input: "bbbbb"
Output: 1
Explanation: The answer is "b"
, with the length of 1.
Example 3:
Input: "pwwkew" Output: 3 Explanation: 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.
这个题目有很多种解法,暴力的,两层循环遍历,但是时间复杂度太高。这个题目跟Two Sum还是很像的,这里我用C++ STL中的map来解答。
代码:
int lengthOfLongestSubstring(string s) {
map<char,int> ss;
int Max = 0;
int lastPos = -1;
for(int i=0;i<s.size();i++){
if(ss.find(s[i])!=ss.end()&&lastPos<ss[s[i]])
{
lastPos = ss[s[i]];
}
if(Max < i-lastPos){
Max = i-lastPos;
}
ss[s[i]] = i;
}
return Max;
}
因为ASCII表共能表示256个字符,所以可以开个256的数组来记录所有字符。