字典序最小字符串旋转


让我们思考一个字符串类型,我们知道,字符串是字符序列。字典序旋转就是字符串旋转,按字典序转换字符。

解法很简单,我们简单地将给定的字符串本身进行串联,然后再在一个数组中,存储字符串的所有旋转情况。然后按升序对这个数组进行排序,最小的值就是最终结果。

输入输出

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

更新于: 2020 年 6 月 17 日

544 次查看

开启你的 职业生涯

通过完成课程获得认证

开始
广告