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