【劍指offer】面試題48. 最長不含重複字符的子字符串

解題思路

利用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;
	}
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章