挑戰字符串
無重複字符的最長子串
給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。
示例 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 };
未完待續~