leetcode字節跳動專題(持續更新)

挑戰字符串

 無重複字符的最長子串

給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。

示例 1:

輸入: "abcabcbb"
輸出: 3 
解釋: 因爲無重複字符的最長子串是 "abc",所以其長度爲 3。

示例 2:

輸入: "bbbbb"
輸出: 1
解釋: 因爲無重複字符的最長子串是 "b",所以其長度爲 1。

示例 3:

輸入: "pwwkew"
輸出: 3
解釋: 因爲無重複字符的最長子串是 "wke",所以其長度爲 3。
     請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。

題解

利用set的無重複性。我們記錄兩個指針l和r,分別表示左右邊界,移動r指針,如果在set集合裏面出現了s[r],則移動左指針,直到set裏面沒有s[r],重複上訴步驟;

參考代碼:

 1 class Solution {
 2 public:
 3     int lengthOfLongestSubstring(string s) {
 4         set<char> st;
 5         int l=0,r=0,ans=0;
 6         while(r<s.size())
 7         {
 8             if(!st.count(s[r]))
 9             {
10                 st.insert(s[r]);
11                 ans=max(ans,(int)st.size());
12                 r++;
13             }
14             else st.erase(s[l++]);
15         }
16         return ans;  
17     }
18 };
C++

 

 

未完待續~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章