【LeetCode】3.无重复字符的最长字串
目录
- 题目
- 算法解法
- 解法一 暴力枚举 + 哈希表(判断字符是否重复出现) (O( n 2 n^{2} n2))
- 解法二 滑动窗口 + 哈希表(判断字符是否重复出现)
- 代码
题目
题目链接:LeetCode-3题
给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。
算法解法
解法一 暴力枚举 + 哈希表(判断字符是否重复出现) (O( n 2 n^{2} n2))
枚举每一个位置能到达的终点。
简单解法,不讲解。
解法二 滑动窗口 + 哈希表(判断字符是否重复出现)
- 滑动窗口的左窗口left = 0,右边窗口right = 0
- 进窗口 让字符进入哈希表
- 判断是否出现重复字符,如果有,出窗口,从哈希表中删除该字符
- 更新结果
代码
class Solution {
public:
unordered_map<char,int> hash;
int lengthOfLongestSubstring(string s) {
int ret = 0; //存结果
//滑动窗口
int left = 0;
int right = 0;
for(right;right<s.size();right++)
{
//进窗口
hash[s[right]]++;
//出窗口
while(hash[s[right]]>1)
{
hash[s[left]]--;
left++;
}
//更新结果
ret = max(ret,right-left+1);
}
return ret;
}
};