1. 程式人生 > >leetcode題庫——無重複字元的最長子串

leetcode題庫——無重複字元的最長子串

題目描述:

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

示例 1:

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

示例 2:

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

示例 3:

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

方法:暴力解決

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int max = 0;
        if(s.size() == 0)
            return max;
        for(int i = 0; i < s.size(); i++){
            int j,k;
            int len = 1;
            if(len > max)
                max=len;
            if(i == s.size()-1)
                break;
            for(j = i + 1; j < s.size(); j++){
                int k;
                for(k=i;k<j;k++){
                    if(s[k]==s[j]){
                        len=j-i;
                        break;
                    }
                }
                if(k==j)
                    len=j-i+1;
                if(len>max){
                    max=len;
                }
                if(k!=j&&s[k]==s[j])
                    break;
            }
            if(len>max){
                max=len;
            }
        }
        return max;
    }
};

執行用時:168 ms

思路:

設定一個for迴圈遍歷字串,第二個和第三個for迴圈遍歷不重複子串長度。要注意字串為空以及只有一個元素的字串的情況。

其他:

這種方法太暴力,複雜度高,若有更好的方法,歡迎指導交流!