leetcode3 最長不重複子串

leetcode3 最長不重複子串

解題思路

使用vector<int>(256,-1)來記錄每一個字符上一次出現的位置。使用兩個指針,前指針start和後指針i來指向當前檢測的子串。i從頭開始遍歷字符串。

  1. 如果s[i]在位置k出現過,且start < k,那麼i - k就是一個不重複子串;
  2. 如果s[i]start之後沒有出現過,則i - start就是一個不重複字符串;

時間複雜度爲O(n)。

代碼

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        vector<int> dict(256, -1);
        int maxLen = 0, start = -1, size = s.size();
        for(int i = 0; i < size; i++) {
            if(dict[s[i]] > start) {
                start = dict[s[i]]; // 更新前指針爲k
            }
            dict[s[i]] = i; // 更新s[i]上一次出現的位置
            maxLen = max(maxLen, i - start);
        }
        return maxLen;
    }
};
發佈了8 篇原創文章 · 獲贊 2 · 訪問量 3476
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章