C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で少なくともK個の繰り返し文字を含む最長のサブストリング


文字列sがあり、T内のすべての文字が少なくとも表示されるように、指定された文字列(小文字のみで構成される)の最長の部分文字列Tの長さを見つける必要があるとします。 k回より。したがって、文字列が「ababbc」でk =2の場合、2つのaと3つのbがあるため、出力は3になり、最長のサブ文字列は「ababb」になります。

これを解決するには、次の手順に従います-

  • longestSubstring()という再帰関数を1つ作成します。これには、文字列sとサイズkが必要です
  • k =1の場合、文字列のサイズを返します
  • 文字列のサイズが
  • サイズ26の配列cを1つ作成し、これに-1を入力します
  • n:=文字列のサイズ
  • 0からnの範囲のiの場合
    • c [s [i] –'a'] =-1の場合、c [s [i] –'a']:=1、それ以外の場合はc [s [i] –'a']を1増やします。
  • badChar:=‘*’
  • 0から25の範囲のiの場合
    • c[i]が-1でc[i]
  • badChar =‘*’の場合、nを返します
  • v:=badCharを使用して元の文字列を分割することによる文字列の別の配列
  • ans:=0
  • 0からvのサイズまでの範囲のiの場合
    • ans:=ansとlongestSubstring(v [i]、k)の最大値
  • 回答を返す
例(C ++)

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   vector <string> splitString(string s, char x){
      string temp = "";
      vector <string> res;
      for(int i = 0; i < s.size(); i++){
         if(s[i] == x){
            if(temp.size())res.push_back(temp);
            temp = "";
         }
         else temp += s[i];
      }
      if(temp.size())res.push_back(temp);
      return res;
   }
   int longestSubstring(string s, int k) {
      if(k == 1)return s.size();
      if(s.size() < k )return 0;
      vector <int> cnt(26, -1);
      int n = s.size();
      for(int i = 0; i < n; i++){
         if(cnt[s[i] - 'a'] == -1) cnt[s[i] - 'a'] = 1;
         else cnt[s[i] - 'a']++;
      }
      char badChar = '*';
      for(int i = 0; i < 26; i++){
         if(cnt[i] != -1 && cnt[i] < k){
            badChar = i + 'a';
            break;
         }
      }
      if(badChar == '*')return n;
      vector <string> xx = splitString(s, badChar);
      int ans = 0;
      for(int i = 0; i < xx.size(); i++)ans = max(ans, longestSubstring(xx[i], k));
      return ans;
   }
};
   main(){
   Solution ob;
   cout << ob.longestSubstring("ababbc", 2);
}
入力
"ababbc"
2

出力

5

  1. Pythonで特定の文字列に含まれるk個の一意の文字を含む最長の部分文字列を検索します

    文字列があるとすると、正確にk個の一意の文字を持つ可能な限り長い部分文字列を返す必要があります。可能な限り長い長さの部分文字列が複数ある場合は、それらのいずれかを返します。 したがって、入力がs =ppqprqtqtqt、k =3の場合、長さ7であるため、出力はrqtqtqtになります。 これを解決するには、次の手順に従います- N:=26 関数is_ok()を定義します。これには数えられます、k val:=0 0からNの範囲のiの場合、実行 0の場合、 val:=val + 1 =val)の場合にtrueを返します メインの

  2. Pythonで文字を繰り返さない最長の部分文字列

    文字列があるとします。文字を繰り返さずに最長の部分文字列を見つける必要があります。したがって、文字列が「ABCABCBB」のような場合、長さ3の繰り返しの部分文字列があるため、結果は3になります。これが「ABC」です。 これを解決するために、次の手順に従います set i:=0、j:=0、情報を保存するために1つのマップを設定します ans:=0 whilej<文字列の長さs map [s [j]]の場合、 ans:=max(ans、j – i + 1) map [s [j]]:=j それ以外の場合 i:=map [s [j]] + 1 ans:=max(ans、