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

辞書式順序で最小の文字列回転


文字列が指定されていると考えてみましょう。文字列は文字のシーケンスであることがわかります。辞書式順序は、文字列を辞書式順序で変換するための文字列の回転です。

解決策は単純です。指定された文字列をそれ自体と連結するだけで、別の配列に文字列のすべての回転が格納されます。その後、配列を昇順で並べ替えると、最小値が最終結果になります。

入力と出力

Input:
The String “BCAAFAABCD”
Output:
Rotated String: “AABCDBCAAF”

アルゴリズム

minStrRotation(str)

入力- 指定された文字列。

出力- 最小限の弦の回転が必要です。

Begin
   n := length of str
   define strArr to store all rotations
   tempStr := concatenate str with str again

   for i := 0 to n, do
      strArr[i] := substring of tempStr from (i to n)
   done

   sort the strArr
   return strArr[0]
End

#include <iostream>
#include <algorithm>
using namespace std;

string minStrRotation(string str) {
   int n = str.size();
   string strArray[n];    //array to store all rotations of str
   string tempStr = str + str;    //concatinate str two times

   for (int i = 0; i < n; i++)
      strArray[i] = tempStr.substr(i, n);    //get sub string from ith index to nth index
   sort(strArray, strArray+n);
   return strArray[0];    //The first index is the result
}

int main() {
   string str;
   cout << "Enter String: "; cin >> str;
   cout << "Rotated String: " << minStrRotation(str);
}

出力

Enter String: BCAAFAABCD
Rotated String: AABCDBCAAF

  1. 文字列がC#の数値であるかどうかを確認するにはどうすればよいですか?

    文字列が-であるとしましょう string str = "3456"; 次に、入力した文字列が数字かどうかを確認します- str.All(c => char.IsDigit(c)) 上記は、文字列が数値の場合はtrueを返し、それ以外の場合はfalseを返します。 これが完全なコードです- 例 using System; using System.Linq; namespace Demo {    public class MyApplication {       public static void Mai

  2. Pythonで特定の文字列を構築するための最小コストを決定するプログラム

    長さnの文字列strを作成する必要があるとします。文字列を作成するために、2つの操作を実行できます。 コストaでstrの最後に文字を追加できます。 コストrのstrの最後に部分文字列sub_strを追加できます。 文字列strを構築するための最小コストを計算する必要があります。 したがって、入力がa =5、r =4、str =tpointのような場合、出力は29になります。 文字列tpointを作成するためのコストは、以下のとおりです- str = 't'; a new character added, therefore the cost is 5. str = &