C++での部分文字列の最大出現数
文字列sがあるとすると、次のルールを満たすサブ文字列の最大出現回数を見つける必要があります-
- サブストリング内の個別の文字の数は、maxLetters以下である必要があります。
- 部分文字列のサイズは、minSizeからmaxSizeの範囲内である必要があります。
したがって、入力が−“ aababcaab”、maxLetters =2、minSize =3、maxSize =4の場合、出力は2になります。サブストリング "aab"は、元のストリングに2回出現します。これは、2つの一意の文字とサイズ3(minSizeとmaxSizeの間)の条件を満たします。
これを解決するには、次の手順に従います-
- マップを定義するm
- minSizeからmaxSizeの範囲のszの場合
- マップxを作成し、一時を作成します。最初は空です
- 0からsz–1の範囲のiの場合
- x[s[i]]を1増やします
- temp:=temp + s [i]
- jが0の場合、iはszからs – 1のサイズの範囲で、iとjを1増やします
- x <=maxLettersのサイズの場合、m[temp]を1増やします
- x[temp[0]]を1つ減らします
- x [temp [0]]が0の場合、xからtemp[0]を削除します
- temp自体からtempの1番目と2番目の要素を削除します
- x[s[i]]を1増やします
- temp:=temp + s [i]
- x <=maxLettersのサイズの場合、m[temp]を1増やします
- ans:=0
- マップmにはいくつかの要素がありますが、
- ans:=ansの最大値とi番目のキーと値のペアの値
- 回答を返す
理解を深めるために、次の実装を見てみましょう-
#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
-
C++五胞体数
五胞体数は、パスカルの三角形の5番目の数として表されます。ご存知のように、これは5番目の数字です。つまり、パスカルの三角形に少なくとも5つの数字が必要です。したがって、このシリーズの最初の数字は 1 4 6 4 1から始まります。 パスカルの三角形の4行目。したがって、このチュートリアルでは、たとえば、n番目の五胞体数を見つける必要があります Input : 1 Output : 1 Input : 4 Output : 35 次の図から出力を確認できます- この問題については、可能な限り、これは一種のシリーズであるため、ソリューションでこのシリーズのパターンを見つけようと
-
最大ベンド数のC++パス長
二分木が与えられる問題を解決するため。次に、曲がりの数が最大のパスを見つける必要があります。つまり、パスの方向が左から右に、またはその逆に変化する場合、たとえば、曲がりが考慮されます 入力- 出力- 6 このアプローチでは、ツリーをトラバースして、以前の動きを追跡します。方向が変わった場合は、曲げカウントを更新するだけで、最大値が見つかります。 解決策を見つけるためのアプローチ このアプローチでは、すべてのパスをトラバースし、回答を更新するベンドの最大数を見つけます。 例 #include <bits/stdc++.h> using namespace std; s