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

C++の特定の文字列で長さ3のサブシーケンスをカウントします


文字列strと長さ3の部分文字列sub_strが与えられます。目標は、str内の部分列sub_strの数を見つけることです。例「行為」は「白内障」(白内障、白内障、白内障)で3回です。

例を挙げて理解しましょう。

入力 − str =“ settlement” sub_str =” set”

出力 −指定された文字列内の長さ3のサブシーケンスのカウントは次のとおりです。5

説明 −サブシーケンスは−

1. set tlement,
2. se t t lement,
3. se ttlemen t,
4. s ettl e men t,
5. settlem e n t

入力 − str =“ knowledge” sub_str =” now”

出力 −特定の文字列内の長さ3のサブシーケンスのカウントは− 1

説明 −サブシーケンスは次のようになります−知識

以下のプログラムで使用されているアプローチは次のとおりです

forループを使用して文字列strをトラバースします。いずれかのstr[i]==sub_str [0]の場合、次の文字sub_str[1]をstr[currentiからi

  • 文字列をstr、部分文字列をsub_strとします。

  • 関数subset_occurrence(string str、int length、string sub_str)は文字列を受け取り、strのsub_strと同じサブシーケンスの数を返します。

  • forループを使用してstrをトラバースします。 i=0からi

  • str [i] ==sub_str [0]の場合、最初の文字が見つかりました。次に、j =i+1からj<長さ

    までを確認します。
  • str [j] ==sub_str [1]の場合、2番目の文字が一致しました。次に、k =j+1からk<長さ

    までを確認します。
  • str [k] ==sub_str[2]の場合。インクリメントカウント。

  • 結果としてカウントを返します。

#include<iostream>
using namespace std;
int subset_occurrence(string str, int length, string sub_str){
   int count = 0;
   for (int i=0; i<length; i++){
      if (str[i]==sub_str[0]){
         for (int j=i+1; j< length; j++){
            if(str[j]==sub_str[1]){
               for(int k=j+1; k<length; k++){
                  if(str[k]==sub_str[2])
                     { count++; }
               }
            }
         }
      }
   }
   return count;
}
int main(){
   string str = "TUTpoinTUTpoinTUT";
   int length = str.length();
   string sub_str = "TUT";
   cout<<"Count of subsequence of length three in a given string are: "<<subset_occurrence(str, length, sub_str);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Count of subsequence of length three in a given string are: 19

  1. C++で別の文字列の部分文字列である1つの文字列の最長部分列の長さを検索します

    2つの文字列XとYがあり、文字列Xの最長部分列の長さを見つける必要があるとします。これは、シーケンスYの部分文字列です。したがって、X =“ ABCD”およびY =“ BACDBDCD”の場合、出力は3になります。 。「ACD」はXの最長のサブシーケンスであり、Yのサブストリングです。 ここでは、動的計画法を使用してこの問題を解決します。したがって、Xの長さがnで、Yの長さがmの場合、次数(m + 1)x(n + 1)のDP配列を作成します。 DP [i、j]の値は、X [0…j]のサブシーケンスの最大長であり、Y[0…i]のサブストリングです。これで、DPの各セルについて、次のようになりま

  2. 指定された文字列がC++の合計文字列であるかどうかを確認します

    ここでは、文字列が合計文字列であるかどうかを確認する方法を説明します。右端の部分文字列がその前の2つの部分文字列の合計として記述できる場合、その文字列は合計文字列と呼ばれ、その前の部分文字列についても同じことが再帰的に当てはまります。 12243660のような文字列が12+24 =36のような合計文字列であり、36が文字列の12と24の後に存在し、再び24 + 36 =60であるとすると、これも文字列に存在します。 文字列Sは、この規則に従っている場合、合計文字列と呼ぶことができます- 𝑠𝑢𝑏𝑠𝑡𝑟𝑖𝑛𝑔(𝑖、𝑥)+𝑠𝑢𝑏𝑠𝑡𝑟𝑖𝑛𝑔(𝑥+ 1、�