解題思路
利用unordered_map作滑動窗口
算法:
1.初始化頭尾指針分別爲head=0,tail=0
2.tail指針右移,並將tail所指元素加入到窗口中,判斷tail當前指向的元素在滑動窗口中是否出現,
- 如果出現,則將滑動窗口當前head所指元素數量-1,並移動head,直到該窗口中不包含該元素.
- 如果未出現,則更新res,並進行下一輪循環,直到tail=s.size()
3.返回結果res
代碼
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_map<char, int> window;
int res = 0;//存儲答案
int head = 0, tail = 0;//雙指針
for (;tail<s.size();tail++)
{
char temp = s[tail];//當前字符
window[temp]++;
//判斷該窗口中是否存在該元素
//如果存在該元素,使head右移,直到該窗口不包含該元素
while (window[temp]>1)
{
char temp2 = s[head];
window[temp2]--;//滑動窗口中該字符數量-1
head++;//右移
}
res = max(res, tail - head+1);
}
return res;
}
};