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

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

  1. サイズ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

  2. C++五胞体数

    五胞体数は、パスカルの三角形の5番目の数として表されます。ご存知のように、これは5番目の数字です。つまり、パスカルの三角形に少なくとも5つの数字が必要です。したがって、このシリーズの最初の数字は 1 4 6 4 1から始まります。 パスカルの三角形の4行目。したがって、このチュートリアルでは、たとえば、n番目の五胞体数を見つける必要があります Input : 1 Output : 1 Input : 4 Output : 35 次の図から出力を確認できます- この問題については、可能な限り、これは一種のシリーズであるため、ソリューションでこのシリーズのパターンを見つけようと