3. 无重复字符的最长子串
给定一个字符串,找出不含有重复字符的 最长子串 的长度。
示例:
给定 “abcabcbb” ,没有重复字符的最长子串是 “abc” ,那么长度就是3。
给定 “bbbbb” ,最长的子串就是 “b” ,长度是1。
给定 “pwwkew” ,最长子串是 “wke” ,长度是3。请注意答案必须是一个子串,”pwke” 是 子序列 而不是子串。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
map<char, int> ch;
int count = 0;
int i = 0;
int max = 0;
int start = 0;
while(i< s.size())
{
//ch中没有重复字母
if( ch.find(s[i]) == ch.end())
{
ch[s[i]] = i;
++count;
++i;
}
//重复字母没在当前计算子串中
else if(ch[s[i]] < start)
{
ch[s[i]] = i;
++count;
++i;
}
//字母重复,更新最值和子串起始位置
else
{
if(count > max)
max = count;
//更新
count = count-(ch[s[i]] - start);
start = ch[s[i]] + 1;
ch[s[i]] = i;
++i;
}
}
if(count > max)
max = count;
return max;
}
};