最長不重複子串與最長不重複子序列

子串與子序列

  • 子串(substring)——在字符串中是連續的
  • 子序列(subsequence)——在字符串中可以不連續,也可以連續

字符串的最長不重複子串

第一次是這樣做的時間複雜度爲O(n2),就是窮舉啦,當然是要超時滴¬_¬

int lengthOfLongestSubstring(string s) {
        if(s == "") return 0;
        int max_len = 1;
        for(int i = 0; i < s.length(); i++){
            for(int j = 0; j < s.length(); j++){
                if(isUnique(s, i, j) && j - i + 1 > max_len){
                    max_len = j - i + 1;
                }
            }
        }
        return max_len;
    }

    bool isUnique(string s, int start, int end){
        int flag = 1;
        for(int i = start; i <= end - 1; i++){
            for(int j = i + 1; j <= end; j++){
                if(s[i] == s[j] && i != j){
                    flag = 0;
                    break;
                }
            }
        }
        if(flag){
            return true;            
        }else{
            return false;
        }
    }

然後改進了下,i和j都只把這個string從開始到結束遍歷了一遍,時間複雜度是O(n)

int lengthOfLongestSubstring(string s) {
        int n = s.length(), i = 0, j = 0;
        bool exist[256] = {false};
        int max_len = 0;
        while(j < n){
            if(exist[s[j]]){
                max_len = max(max_len, j - i);
                while(s[i] != s[j]){
                    exist[s[i]] = false;
                    i++;
                }
                i++;
                j++;
            }else{
                exist[s[j]] = true;
                j++;
            }
        }
        max_len = max(max_len, n - i);
        return max_len;
    }

具體分析是參考的這裏

字符串最長不重複子序列

字符串中的不重複序列

int lengthOfLongestSubstring(string s) {
        int max_len = 0, flag;
        for(int i = 0; i < s.length(); i++){
            flag = 1;
            for(int j = 0; j < i; j++){
                if(s[i] == s[j]){
                    flag = 0;
                    break;
                }
            }
            if(flag){
                max_len++;
            }
        }
        return max_len;
    }
發佈了42 篇原創文章 · 獲贊 11 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章