leetcode_[Python/C++]_3_Longest Substring Without Repeating Characters(不重複子串最大長度)

題目鏈接
【題意】
給定一個字符串,找到其中的一個最長的字串,使得這個子串不包含重複的字符
【分析】
題目很簡單,第一眼想到的是動態規劃,另外主要是爲了分享一些做法寫法


C++

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if(s.size()==0) return 0;
        if(s.size()==1) return 1;
        vector<int> chr(256,-1);
        vector<int> dp(s.size(),-1);
        dp[0] = 0;
        chr[s[0]] = 0;
        int max = -10000;
        for(int i=1;i<s.size();i++){
            if(chr[s[i]] == -1){
                dp[i] = dp[i-1];
                chr[s[i]] = i;
            }
            else{
                if(chr[s[i]] < dp[i-1]){
                    chr[s[i]] = i;
                    dp[i] = dp[i-1];
                }
                else{
                    dp[i] = chr[s[i]]+1;
                    chr[s[i]] = i;
                }
            }
            if(i - dp[i]>max)   max = i - dp[i];
        }
        return max + 1;
    }
};

另一種解法:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        vector<int> dict(256, -1);
        int maxLen = 0, start = -1;
        for (int i = 0; i != s.length(); i++) {
            if (dict[s[i]] > start)
                start = dict[s[i]];
            dict[s[i]] = i;
            maxLen = max(maxLen, i - start);
        }
        return maxLen;
    }
};

python:

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        curr, res, letter = 0, 0, set()
        for i, ch in enumerate(s):
            while ch in letter:
                letter.remove(s[curr])
                curr += 1
            letter.add(ch)
            res = max(res, i - curr + 1)
        return res

分享一個極其簡單的python寫法:

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        l_substr, l_suffix = '', ''
        for each in s:
            l_suffix, l_substr = each in l_suffix and l_suffix[l_suffix.index(each) + 1:] + each or l_suffix + each, max((l_suffix, l_substr), key=len)
        return len(l_substr)
發佈了45 篇原創文章 · 獲贊 18 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章