题目
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。
题目链接
思路
滑动窗口模式 获取子串
使用 unordered_map 来判断是否存在重复子串
代码
class Solution {
public:
int lengthOfLongestSubstring(string s)
{
unordered_map<char,int> charMap;
int stringLen = s.length(),result = 0, bunchLen = 0;
char alpha;
unordered_map<char, int>::iterator it;
for (int start = 0, end = 0; end < stringLen; end++)
{
alpha = s.at(end);
it = charMap.find(alpha);
if (it != charMap.end() && it ->second >=start)//已有相同字符 且位置在 start 与 end 的子串中
{
start = it->second + 1;//起始位置右移
bunchLen = end - start;//更新长度
}
charMap[alpha] = end;//插入新字符
++bunchLen;
result = bunchLen > result ? bunchLen : result;//对比新子串的长度和上一个子串长度
}
return result;
}
};