C ++中子字符串的最大出现次数

假设我们有一个字符串s,我们必须找到满足以下规则的任何子字符串的最大出现次数-

  • 子字符串中不同字符的数量必须小于或等于maxLetters。

  • 子字符串的大小必须在minSize和maxSize(含)范围内。

因此,如果输入类似于-“ aababcaab”,maxLetters = 2,minSize = 3并且maxSize = 4,则输出将为2。子字符串“ aab”在原始字符串中出现2次。这满足条件,即2个唯一字母和3号(介于minSize和maxSize之间)。

为了解决这个问题,我们将遵循以下步骤-

  • 定义映射m

  • 适用于介于minSize至maxSize之间的sz

    • 如果x <= maxLetters的大小,则将m [temp]增加1

    • 将x [temp [0]]减少1

    • 如果x [temp [0]]为0,则从x中删除temp [0]

    • 从临时本身中删除临时的第一和第二个元素

    • x [s [i]]增加1

    • temp:= temp + s [i]

    • x [s [i]]增加1

    • temp:= temp + s [i]

    • 制作映射x,创建临时图,最初是空的

    • 当我的范围是0到sz – 1

    • 当j为0时,i在sz到s – 1的范围内,将i和j加1

    • 如果x <= maxLetters的大小,则将m [temp]增加1

    • 回答:= 0

    • 虽然映射m有一些元素,那么

      • ans:= ans的最大值和第i个键值对的值

    • 返回ans

    例子(C ++)

    让我们看下面的实现以更好地理解-

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       int maxFreq(string s, int maxLetters, int minSize, int maxSize) {
          unordered_map <string ,int > m;
          for(int sz = minSize; sz <= minSize; sz++){
             unordered_map <char, int> x;
             string temp ="";
             for(int i = 0; i < sz; i++){
                x[s[i]]++;
                temp += s[i];
             }
             for(int j = 0, i = sz; i < s.size(); i++, j++){
                if(x.size() <= maxLetters){
                   m[temp]++;
                }
                x[temp[0]]--;
                if(x[temp[0]] == 0)x.erase(temp[0]);
                temp.erase(temp.begin(),temp.begin() + 1);
                x[s[i]]++;
                temp += s[i];
             }
             if(x.size() <= maxLetters){
                m[temp]++;
             }
          }
          int ans = 0;
          unordered_map <string ,int > :: iterator i = m.begin();
          while(i != m.end()){
             ans = max (ans, i->second);
             i++;
          }
          return ans;
       }
    };
    main(){
       Solution ob;
       cout << (ob.maxFreq("aababcaab",2,3,4));
    }

    输入值

    "aababcaab"
    2
    3
    4

    输出结果

    2