Describe
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for “abcabcbb” is “abc”, which the length is 3. For “bbbbb” the longest substring is “b”, with the length of 1.
Analyse
这个题目的意思是给你一个字符串,找到其中最长的子串,且这个子串中不包含重复的字符。我使用了map来实现,对字符串来一个循环,当前的字符为s[i],如果在map中找到了以s[i]为键的项,说明遇到了相同的字母,字串不能继续了,因为存在重复的字符了,这个时候的开始位置应该是原来的开始位置和当前重复字母的下一个位置两个中较大的一个,然后计算子串长度,与当前最长子串长度比较,取其较大者。
Code
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.length()<2)
return s.length();
map<char,int> m;
int start = 0,maxLength = 0;
for(int i=0;i<s.size();i++){
if(m.find(s[i])!=m.end()){
start = max(m[s[i]]+1,start);
}
m[s[i]] = i;
maxLength = max(maxLength,i-start+1);
}
return maxLength;
}
};