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

C++で隣接する重複を含まない最も近い文字列を出力します


この問題では、文字列が与えられます。私たちのタスクは、現在の文字列に最も近く、隣接する重複文字を含まない文字列を印刷することです。

問題を理解するために例を見てみましょう

Input: string = “good”
Output: goad

この例では、インデックス1と2の要素が同じであることがわかったため、インデックス2の要素を変更します。

この問題を解決するために、文字列をトラバースして、隣接する2つの要素が同じであるかどうかを確認します。はいの場合は、2番目の要素を変更します(i要素とi + 1要素が同じ場合は、i + 1要素を変更します)。これを解決するには、欲張りアルゴリズムを使用し、隣接する類似要素のペアごとに1つの変更を加えます。覚えておく必要があることの1つは、変更中に近くのすべての要素をチェックすることです。つまり、変更後よりもi番目の要素を変更する場合、i+1とiインデックス要素は異なるはずです。

ソリューションの実装を示すプログラム

#include <iostream>
#include <string.h>
using namespace std;
void printStringWithNoDuplicates(string str){
   int len = str.length();
   for (int i = 1; i < len; i++){
      if (str[i] == str[i - 1]){
         str[i] = 'a';
         while (str[i] == str[i - 1] || (i + 1 < len && str[i] == str[i + 1])) str[i]++;
         i++;
      }
   }
   cout<<str;
}
int main(){
   string str = "good";
   cout<<"The orignal string is : "<<str<<endl;
   cout<<"String without adjecent duplicate characters is : ";
   printStringWithNoDuplicates(str);
   return 0;
}

出力

The orignal string is : good
String without adjecent duplicate characters is : goad

  1. C ++に仮想コンストラクターがないのはなぜですか?

    仮想メカニズムは、派生クラスオブジェクトへの基本クラスポインタがある場合にのみ機能します。 C ++では、コンストラクターを仮想にすることはできません。これは、クラスのコンストラクターが実行されるときに、メモリに仮想テーブルがないため、仮想ポインターがまだ定義されていないことを意味します。したがって、コンストラクターは常に非仮想である必要があります。 ただし、仮想デストラクタは可能です。これが例です 例 #include<iostream> using namespace std; class b {    public:    b()

  2. ベクトルはC++でどのように機能しますか?

    ベクトルには、要素が挿入または削除されたときに動的配列のように自動的にサイズを変更する機能があり、コンテナはストレージを自動的に処理します。ベクトル要素は、イテレータを使用してアクセスおよびトラバースできるように、連続したストレージに配置されます。データは、ベクトルの最初、中間、または最後で挿入または消去できます。 これは、ベクトルのさまざまな機能を実装するためのC++プログラムです。 アルゴリズム Begin    Declare a variable v of vector type.    Declare another variable it