目录
- 题目
- 算法解法
- 解法一 暴力枚举 + 哈希表(判断字符是否重复出现) (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;}
};