1. 程式人生 > >Leetcode:003 無重複字串

Leetcode:003 無重複字串

Leetcode:003 無重複字串

關鍵點:給定一個字串,請你找出其中不含有重複字元的 最長子串 的長度。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。
示例 3:
輸入: "pwwkew"
輸出: 3
解釋: 因為無重複字元的最長子串是 "wke",所以其長度為 3。
請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。

 1class Solution {
2public:
3
    int lengthOfLongestSubstring(string s) {
4
5        if(s.empty()){  /*首先判斷是否為空*/
6            return 0;  
7        }  
8
        int i = 0, j = 1;                   /*i表示子串頭部,j表示子串尾部*/
9        int len = 0
;                          /*子串長度*/
10        while(j < s.size()&& i < s.size()){                /*總字串的長度*/
11            string t = s.substr(i, j - i);  /*substr()函式擷取i~j子串:Sij*/
12            int pos = t.find(s.at(j));      /*發現字串的下標*/
13            if (pos < t.size()){            /*保證pos在總字串之內,避免重複*/
14                if (len < j - i){           /*如果發現子串比之前的長度長,就替換掉原來的長度*/
15                    len = j - i;            
16                }  
17                i =  i + pos + 1;           /*子串頭部位置要更新,向後移一位*/
18            }  
19            ++j; 
20        }  
21        if (len < j - i){                   /*跳出迴圈記得儲存結果*/
22            len = j - i;                    /* 更新長度 */
23        }  
24        return len
25    }
26};