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

C++で同じ文字列を取得するために必要な最小回転


問題の説明

文字列が与えられた場合、同じ文字列を取得するために必要な最小回転数を見つける必要があります

入力文字列が「bbbbb」の場合、最低1回転が必要です

アルゴリズム

1. Initialize result = 0
2. Make a temporary string equals to original string concatenated with itself.
3. Take the substring of temporary string of size same as original string starting from second character i.e. index 1
4. Increment the counter
5. Check whether the substring becomes equal to original string. If yes, then break the loop. Else go to step 2 and repeat it from the next index

#include <bits/stdc++.h>
using namespace std;
int getRotationCount(string str) {
   string temp = str + str;
   int n = str.length();
   for (int i = 1; i <= n; ++i) {
      string sub = temp.substr(i, str.size());
         if (str == sub) {
            return i;
         }
   }
   return n;
}
int main() {
   string str = "bbbbb";
   cout << "Rotation count = " << getRotationCount(str) <<
   endl;
   return 0;
}

上記のプログラムをコンパイルして実行する場合。次の出力を生成します

出力

Rotation count = 1

  1. 指定された配列の最初の文字列で、その逆もC++の同じ配列に存在します

    この問題では、サイズNの文字列str []の配列が与えられます。私たちのタスクは、指定された配列から最初の文字列を検索するプログラムを作成することです。この配列の逆も同じ配列に存在します 。 問題を理解するために例を見てみましょう Input: str[] = ["python", "program", "C#", "language", "#C"] Output: C# ソリューションアプローチ この問題を解決する1つの方法は、文字列配列の各要素を直接トラバースし、残りの配列の文字列のレ

  2. C++で対戦相手を捕まえるために必要な最小ステップ数を見つけるためのプログラム

    [u、v]の形式のツリーエッジのリストがあると仮定します。これは、uとvの間に無向エッジがあることを示します。また、xとyの2つの値があります。ノードxにいて、対戦相手がノードyにいる場合。最初のラウンドでは移動し、次のラウンドでは対戦相手が移動します。対戦相手は、ラウンドで移動しないことを選択できます。対戦相手を捕まえるのに必要な最小ラウンド数を見つける必要があります。 したがって、入力がedges =[[0、1]、[0、2]、[1、3]、[1、4]]、x =0、y =3のような場合、出力は3になります。最初と同じように、ノード0から1に移動します。その後、対戦相手は現在のノード3に留まり