Longest Substring with At Least K Repeating Characters解題報告

Description:

Find the length of the longest substring T of a given string (consists of lowercase letters only) such that every character in T appears no less than k times.

Example:

Example 1:

Input:
s = "aaabb", k = 3

Output:
3

The longest substring is "aaa", as 'a' is repeated 3 times.

Example 2:

Input:
s = "ababbc", k = 2

Output:
5

The longest substring is "ababb", as 'a' is repeated 2 times and 'b' is repeated 3 times.

Link:

https://leetcode.com/problems/longest-substring-with-at-least-k-repeating-characters/description/

解題方法:

用遞歸的方法,現在當前字符串中找出出現次數小于k次的字符,根據不合格的字符將當前字符分割成一個個子串。重復分割過程,找出最大的合格子串長度。

Time Complexity:

O(26N) = O(N)

完整代碼:

int longestSubstring(string s, int k) 
    {
        int maxLen = 0;
        if(!s.size())
            return maxLen;
        vector<int> record(26, 0);
        for(char ch: s)
        {
            record[ch - 'a']++;
        }
        unordered_set<char> invalid;
        for(int i = 0; i < s.size(); i++)
        {
            if(record[s[i] - 'a'] < k)
                invalid.insert(s[i]);
        }
        if(invalid.empty())
            return s.size();
        int maxlen = 0, last = 0;
        for(int i = 0; i < s.size(); i++)
        {
            if(invalid.find(s[i]) != invalid.end())
            {
                maxlen = max(maxlen, longestSubstring(s.substr(last, i - last), k));
                last = i + 1;
            }
        }
        maxlen = max(maxlen, longestSubstring(s.substr(last), k));  
        return maxlen;
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容