1、题目解析
题目如图。
2、算法分析
方法一:
暴力枚举:把所有子串枚举出来,符合条件的进行判断,更新结果。
可以结合哈希表,进行重复字符判断。
方法二:
滑动窗口:
第一步是初始化:
初始化两个指针,left 和 right, left 和 right区间内则为窗口大小。
第二步是进入窗口:
right指针不断向右走。
第三步是判断:
判断如果重复则出窗口(left指针向右走),再次判断,如此循环。
判断如果不重复则更新结果,再次入窗口(right向右走)。
判断如果走到结尾则结束程序。
3、代码编写
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_map<char, int> hash; //定义哈希表
int left = 0; //初始化
int right = 0;
int res = 0;
int tmpres = 0;
while(right < s.size())
{
if(hash[s[right]] != 0)
{
hash[s[left]] = 0;
left++;
tmpres--;
continue;
}
hash[s[right]] = 1;
tmpres++;
res = max(tmpres, res);
right++;
}
return res;
}
};