leetcode395。少なくともK個の繰り返し文字を含む最長の部分文字列

ここに画像の説明を挿入します

class Solution {
    
    
public:
    int longestSubString(const string &s,int left,int right,int k){
    
    
        if(right-left+1<k){
    
    
            return 0;
        }
        unordered_map<char,int> letters;
        for(int i=left;i<=right;++i){
    
    
            letters[s[i]]++;
        }
        
        vector<int> splits;  //不满k个字符的元素的下标
        for(int i=left;i<=right;++i){
    
    
            if(letters.count(s[i])&&letters[s[i]]<k){
    
    
                splits.push_back(i);
            }
        }
        if(splits.size()==0){
    
    
            return right-left+1;
        }

        int L=left,R;
        int answer=0;
        for(int i=0;i<splits.size();++i){
    
    
            R=splits[i]-1;
            answer=max(answer,longestSubString(s,L,R,k));
            L=R+2;   
        }
        //还需考虑最后一段
        L=R+2,R=right;
        answer=max(answer,longestSubString(s,L,R,k));   
        return answer;
    }
    int longestSubstring(string s, int k) {
    
    
        return longestSubString(s,0,s.length()-1,k);
    }
};

ノート:

  1. セット範囲コンストラクター:パラメーターは、次のようなポインターアドレスです
    。inta[] = {1,2,3,4,5} set myset(a + 2、a + 4)、mysetは{3,4}

おすすめ

転載: blog.csdn.net/livingsu/article/details/114198002