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

i番目の文字がC++で指定された単語の(i-1)番目、i番目、または(i + 1)番目の文字のいずれかである単語の数


入力として文字列str[]が与えられます。目標は、str []と同じ長さで、i番目の文字が位置(i1)または(i)または(i + 1)の文字に置き換えられるような文字の位置を持つstr[]の単語をカウントすることです。

最初の文字の置換は、位置iまたはi+1から行われます

最後の文字の置換は、位置i-1またはiから行われます。

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

入力 − str [] =“ TPP”

出力 −指定された単語のi番目の文字が(i-1)番目、i番目、または(i + 1)番目の文字である単語の数は− 4

説明

Replacing T by T (i)th or 1st P (i+1)th = TPP, PPP
Replacing 1st P by T (i-1)th, P (i)th, or P(i+1)th = TTP, TPP, TPP
Replacing 2nd P by P(i-1)th or P(i)th = TPP, TPP
Unique combination of replacements: TPP, PPP, TTP, PTP

入力 − str =“ aaa”

出力 −指定された単語のi番目の文字が(i-1)番目、i番目、または(i + 1)番目の文字である単語の数は次のとおりです。1

説明

Replacing a by a (i)th or 2nd a (i+1)th = aaa, aaa
Replacing 2nd a by a (i-1)th, a (i)th, or a(i+1)th = aaa, aaa, aaa
Replacing 3rd a by a(i-1)th or a(i)th = aaa, aaa
Unique combination of replacements: aaa

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

すべての文字に対して、3つの可能性があることを私たちは知っています。現在の文字iについて、すべての(i-1)番目、i番目、(i + 1)番目が異なる場合、3つのオプションがあります。 2つが同じである場合、2つのオプションがあり、すべてが同じである場合、1つのオプションのみです。

したがって、文字列をトラバースして一意性を確認し、文字に応じて3、2、または1を掛けます。最初と最後の文字については、一意性を確認し、同様の方法で2または1を掛けます。

  • 文字列str[]を文字配列として使用します。

  • 関数total(char str []、int length)は文字列を受け取り、i番目の文字が(i-1)番目、i番目、または(i + 1)番目の任意の文字である単語の数を返します。 str[]の単語。

  • 最初のカウントを1とします。str[]自体の単語。

  • 1文字の場合、長さは1になり、1を返します。

  • インデックス0の最初の文字を確認します。2番目の文字と同じ場合は、str [0] ==str [1]で、カウントに1を掛けます

  • それらが異なる場合は、カウントに2を掛けます。

  • 次に、インデックスi =1からi

  • インデックスiの各文字について。 str[i]がstr[i-1]またはstr[i+1]と同じかどうかを確認します。はいの場合、カウントに1を掛けます。

  • 2つが同じである場合は、カウントに2を掛けます。

  • それ以外の場合は、カウントに3を掛けます。

  • 最後の文字については、str [i-1] ==str[i]かどうかを確認してください。 trueの場合、カウントに1を掛けます。それ以外の場合は2を掛けます

  • 最後に、そのような明確な単語を数えます。

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

#include<bits/stdc++.h>
using namespace std;
int total(char str[], int length){
   int count = 1;
   if (length == 1){
      return count;
   }
   if (str[0] == str[1]){
      count = count * 1;
   }
   else{
      count = count * 2;
   }
   for (int j=1; j<length-1; j++){
      if (str[j] == str[j-1] && str[j] == str[j+1]){
         count = count * 1;
      }
      else if (str[j] == str[j-1]){
         count = count * 2;
      }
      else if(str[j] == str[j+1]){
         count = count * 2;
      }
      else if(str[j-1] == str[j+1]){
         count = count * 2;
      }
      else{
         count = count * 3;
      }
   }
   if (str[length - 1] == str[length - 2]){
      count = count * 1;
   }
   else{
      count = count * 2;
   }
   return count;
}
int main(){
   char str[] = "TPP";
   int length = strlen(str);
   cout<<"Count of words whose i-th letter is either (i-1)-th, i-th, or (i+1)-th letter of given word
are: "<<total(str, length) << endl;
   return 0;
}

出力

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

Count of words whose i-th letter is either (i-1)-th, i-th, or (i+1)-th letter of given word are: 4

  1. ソートされた二重リンクリスト内のトリプレットをカウントします。このリストの積は、C++で指定された値xに等しくなります。

    整数値を含むソートされた二重リンクリストが与えられます。目標は、積が与えられた値xに等しいトリプレットを見つけることです。入力リンクリストが3−4−1−2で、xが6の場合、カウントは1になります(トリプレット(3,1,2)) 例 入力 linked list: [ 200−4−16−5−10−10−2 ] x=200 出力 Count of triplets in a sorted doubly linked list whose product is equal to a given value x are:

  2. 合計がC++の指定された値xに等しい2つのBSTからペアをカウントします

    入力として2つの二分探索木と変数xが与えられます。目標は、ノードの値の合計がxに等しくなるように、各ツリーからノードのペアを見つけることです。 BST_1からノード1を取得し、BST_2からノード2を取得して、両方のデータ部分を追加します。 sum=xの場合。インクリメントカウント。 例を挙げて理解しましょう。 入力 出力 −合計が特定の値xに等しい2つのBSTからのペアの数は− 1 説明 −ペアは(8,6) 入力 出力 −合計が特定の値xに等しい2つのBSTからのペアの数は− 2 説明 −ペアは(5,15)と(4,16) 以下のプログラムで使用されているアプ