LeetCode 3.無重複字符的最長子串——滑動窗口

  • 鏈接 :原題
  • 題意 : 給定一個字符串s,尋找沒有重複字符的最長子串,輸出長度。
    例如 pwwkew 最長子串 wke。則長度爲3.
  • 思路 :
    首先注意一下,子串 ≠ 子序列,子串是連續的。
    此題用的是雙指針的一個應用,滑動窗口。思路即是,初始時,left = right = 0,然後只要滿足條件 right指針右移,維護一個ans 代表最長子串的長度。如果不滿足條件,則left 右移,縮減窗口,直到再滿足條件,則right右移。
    此題要用到 unordered_set ,無序集合更快一些。
  • 代碼:
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int left = 0, right = 0, ans = 0;
        int len = s.length();
        unordered_set<char> vis;
        while(left < len){
        	//右指針移動,窗口增大
            while(right < len && !vis.count(s[right])){
                vis.insert(s[right]);
                right++;
            }
            //維護一個最長子串
            ans = max(ans,right - left);
            //左指針移動
            vis.erase(s[left]);
            left ++;
        }
        return ans;
    }
};
  • 遇到的問題:
    一開始以爲右指針移動完即可,應該是左指針。而且直接用set,有些慢。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章