长子串(medium)"/>
[滑动窗口]leetcode3:无重复字符的最长子串(medium)
题解:
题解1:用set来表示窗口
class Solution {
public://滑动窗口,用set来存放窗口值int lengthOfLongestSubstring(string& s) {set<char> window; //窗口,set不允许重复关键字,自动去重int left=0,right=0; //窗口边界int result=0,n=s.size();while(right<n){if(window.find(s[right])==window.end())//没有出现重复字符,继续扩大窗口{window.insert(s[right++]);result=max(result,(int)window.size());}else//出现重复字符,缩小窗口{window.erase(s[left++]);}}return result;}
};
题解2:用hashmap来表示窗口
class Solution {
public:int lengthOfLongestSubstring(string s) {/*解法2:使用hashmap*/unordered_map<char,int> recond;int left=0,result=0;for(int right=0;right<s.size();++right){//若新遍历到字符已存在,那么我们直接将left更新到重复字符的下一个位置(隐含条件:重复字符下一个位置大于窗口的左边界下标);若不存在,则left不变left=max(left,recond[s[right]]);recond[s[right]]=right+1;//该字符的下个位置result=max(result,right-left+1);}return result;}
};
更多推荐
[滑动窗口]leetcode3:无重复字符的最长子串(medium)
发布评论