C++で一致するサブシーケンスの数
文字列Sと単語wordsの辞書があるとすると、Sのサブシーケンスであるwords [i]の数を見つけます。したがって、入力がS =“ abcde”で、辞書が[“ a”、“ bb”、 「acd」、「ace」]の場合、出力は3になります。辞書にはSのサブシーケンスである単語の3つのシーケンスがあるため、「a」、「acd」、「ace」
これを解決するには、次の手順に従います-
- n:=単語配列のサイズ
- 1つのマップを作成するm
- 0から単語のサイズまでの範囲のiの場合
- words[i]をマップのm[words[i、0]]の位置に挿入します
- ans:=0
- 0からSのサイズまでの範囲のiの場合
- char x:=S [i]
- xがマップmに存在する場合、
- temp:=m [x]、およびm [x] を削除します
- 範囲0から一時サイズのjの場合
- temp [j] =1の場合、ansを1増やします。それ以外の場合は、temp[j]のサブストリングをインデックス1からm[temp [j、1]] に挿入します。
- 回答を返す
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class Solution { public: int numMatchingSubseq(string S, vector<string>& words) { int n = words.size(); map <char, vector <string> > m; for(int i = 0; i < words.size(); i++){ m[words[i][0]].push_back(words[i]); } int ans = 0; for(int i = 0; i < S.size(); i++){ char x = S[i]; if(m.find(x) != m.end()){ vector <string> temp = m[x]; m.erase(x); for(int j = 0; j < temp.size(); j++){ if(temp[j].size() == 1){ ans++; } else { m[temp[j][1]].push_back(temp[j].substr(1)); } } } } return ans; } }; int main() { Solution ob1; string s = "abcde"; vector<string> v{"a","bb","acd","ace"}; cout << ob1.numMatchingSubseq(s, v) << endl; return 0; }
入力
"abcde" ["a","bb","acd","ace"] string s = "abcde"; vector<string> v{"a","bb","acd","ace"};
出力
3
-
サイズdで作成できる十二角形の数をカウントするC++プログラム
数dがあるとします。正方形のタイルと辺の長さが1の通常の三角形のタイルが無数にあると考えてください。これらのタイルを使用して、側面dの通常の十二角形(12辺の多角形)を形成できる方法をいくつ見つける必要があります。答えが大きすぎる場合は、結果mod998244353を返します。 ステップ これを解決するために、次の手順に従います- b := floor of d/2 - 1 c := 1 for initialize i := 2, when i < d, update (increase i by 1), do: b := b * (floor of
-
C++五胞体数
五胞体数は、パスカルの三角形の5番目の数として表されます。ご存知のように、これは5番目の数字です。つまり、パスカルの三角形に少なくとも5つの数字が必要です。したがって、このシリーズの最初の数字は 1 4 6 4 1から始まります。 パスカルの三角形の4行目。したがって、このチュートリアルでは、たとえば、n番目の五胞体数を見つける必要があります Input : 1 Output : 1 Input : 4 Output : 35 次の図から出力を確認できます- この問題については、可能な限り、これは一種のシリーズであるため、ソリューションでこのシリーズのパターンを見つけようと