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