1. 程式人生 > >[leetcode]無重複字元的最長子串(Longest Substring Without Repeating Characters)

[leetcode]無重複字元的最長子串(Longest Substring Without Repeating Characters)

無重複字元的最長子串(Longest Substring Without Repeating Characters)

給定一個字串,找出不含有重複字元的最長子串的長度。

示例 1:

輸入: "abcabcbb"
輸出: 3 
解釋: 無重複字元的最長子串是 "abc",其長度為 3。

示例 2:

輸入: "bbbbb"
輸出: 1
解釋: 無重複字元的最長子串是 "b",其長度為 1。

示例 3:

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

題解:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int length=s.length();
        int mmax=0;
        if(length<=1)
            mmax=length;
        
        set<char> t;
        
        for(int i=0;i<length;i++)
        {
            for(int j=i;j<length;j++)
            {
                if(t.count(s[j]))     
                {
                    break;
                }
                else 
                    t.insert(s[j]);

            }
            int size=t.size();
            mmax=(mmax>size) ? mmax:size;       
            t.clear();               
        }
        return mmax;
        
        
    }
};

首先排除長度小於等於1的特殊情況,然後建立一個set,利用set中的方法count() 來查詢set中某個某個鍵值出現的次數,迴圈遍歷,沒有在set裡面出現過的會加進set,出現過就停止本次迴圈,這樣set的大小就是本次迴圈的結果,再加個比較篩選最大值得程式碼就可以了。