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

C++で同じ文字で構成される長さKの部分文字列の最大数


タスクが与えられた場合、長さ Kの部分文字列の最大数を見つけることです 同じ文字で構成されています。文字列sと別の整数K 、サイズ Kのサブ文字列の出現をカウントする必要があります 同じ文字を持っています。

見つかったサブ文字列から、最大回数発生するサブ文字列を選択する必要があります。

例を使用して、私たちがしなければならないことを理解しましょう-

入力

s = ”tuuxyyuuc”, K = 2

出力

2

説明

ここで、長さ2で同じ文字を持つサブ文字列は、「uu」と「yy」ですが、「yy」は1回だけ発生し、「uu」は2回存在することがわかります。したがって、出力は2になります。

入力

s = “hhigggff”, K = 3

出力

1

以下のプログラムで使用されるアプローチは次のとおりです

  • Max()関数で、int ans =0を初期化して最終回答を格納し、size =str.size()を初期化して文字列のサイズを格納し、charcを宣言してチェックする必要のある文字を格納します。

  • j =0からj<26までループし、各文字をチェックするため、c =‘a’+jを入力します。

  • 現在の文字を含むサブ配列の出現を格納するために、変数int CurrCh=0を初期化します。

  • i=0からi<=size – Kまでループし、(str [i]!=c)かどうかを確認します。その場合は、続行を追加します。ステートメント。

  • count =0を初期化して、現在の文字のサブ配列の長さを格納します。

  • 条件(i count 。 whileループの外側では、iが1減少します。

  • (count ==K)かどうかを確認します。その場合は、 CurrChをインクリメントします 。

  • 2番目のForループを閉じて、 ansの値を更新します ans =max(ans、CurrCh)を置くことによって。

  • 最後に、最初のForループを閉じて、 ansを返します。 。

#include <bits/stdc++.h>
using namespace std;
int Max(string str, int K){
   int ans = 0, size = str.size();
   char c;
   //Checking for all characters
   for (int j = 0; j < 26; j++){
      c = 'a' + j;
      //checking for current character
      int CurrCh = 0;
      for (int i = 0; i <= size - K; i++){
         if (str[i] != c)
            continue;
         //Counting the size of sub-string
         int count = 0;
         while (i < size && count != K && str[i] == c){
            i++;
            count++;
         }
         i--;
         //Increment CurrCh if sub-string has length K
         if (count == K)
            CurrCh++;
      }
      //Update ans
      ans = max(ans, CurrCh);
   }
   return ans;
}
//main function
int main(){
   string str = "tuuuxyuuu";
   int K = 3;
   cout << Max(str, K);
   return 0;
}

出力

2

  1. 最初の山で最大の干し草の俵を数えるC++コード

    n個の要素と別の値dを持つ配列Aがあるとします。農民は会社にn個の干し草を配置しました。 i番目の山にはA[i]干し草の俵が含まれています。毎日、牛は任意の山の干し草ベールを隣接する山に移動することを選択できます。牛は、それ以外の場合は何もしない日にこれを行うことができます。牛は、d日で最初の山の干し草の俵を最大化したいと考えています。最初の山の干し草の俵の最大数を数える必要があります。 したがって、入力がd=5のような場合。 A =[1、0、3、2]の場合、出力は3になります。これは、最初の日は3日から2日に移動し、2日目には再び3日から2日に移動し、次の2日は2日から1日を通過するためで

  2. 最大ベンド数のC++パス長

    二分木が与えられる問題を解決するため。次に、曲がりの数が最大のパスを見つける必要があります。つまり、パスの方向が左から右に、またはその逆に変化する場合、たとえば、曲がりが考慮されます 入力- 出力- 6 このアプローチでは、ツリーをトラバースして、以前の動きを追跡します。方向が変わった場合は、曲げカウントを更新するだけで、最大値が見つかります。 解決策を見つけるためのアプローチ このアプローチでは、すべてのパスをトラバースし、回答を更新するベンドの最大数を見つけます。 例 #include <bits/stdc++.h> using namespace std; s