[48]最长不含重复字符的子字符串
题目
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度
假设字符串中只包含从’a’到’z’的字符
在字符串
arabcacfr
最长的不含重复字符的子字符串是
acfr
,长度为 4
思路
双指针
构成滑动窗口
- 移动右指针,直到滑动窗口不满足条件
- 此时移动左指针,直到滑动窗口满足条件
【利用哈希表记录,字母是否出现】
代码
class Solution {
public:
int longestSubstringWithoutDuplication(string s)
{
int i = 0, j = 0;
int res = 0;
unordered_map<char, int> map;
while (j < s.size())
{
map[s[j]]++;
while (map[s[j]] > 1 ) //【此时是加进来的j重复】 需要将 i 指针向后移动
{
map[s[i]]--;
i++; // 移动i
}
res = max(res,j - i + 1);
j++;
}
return res;
}
};