C++程序 查找字典顺序最小的字符串旋转|集1

C++程序 查找字典顺序最小的字符串旋转|集1

写一个代码,在一个循环数组中找到字典序最小的,例如:对于数组BCABDADAB,字典序最小的是ABBCABDAD。

更多示例:

输入: GEEKSQUIZ
输出: EEKSQUIZG

输入: GFG
输出: FGG

输入: GEEKSFORGEEKS
输出: EEKSFORGEEKSG

下面是一种简单的解决方案。假设给定的字符串为“str”

1)将“str”连接到它自己上,并将其存储在临时字符串“concat”中。

2)创建一个字符串数组来存储“str”的所有旋转。让数组为“arr”。

3)通过在索引0、1、2..n-1处获取“concat”的子字符串来查找“str”的所有旋转。将这些旋转存储在arr []中

4)对arr []进行排序并返回arr [0]。

下面是上述解决方案的实现。

//一个查找给定字符串的字典序最小旋转的简单C++程序
#include <iostream>
#include <algorithm>
using namespace std;
  
//此函数返回str的字典序最小旋转
string minLexRotation(string str)
{
    //找出给定字符串的长度
    int n = str.length();
  
    //创建一个字符串数组来存储所有旋转
    string arr [n];
  
    //创建一个字符串的连接
    string concat = str + str;
  
    //一个一个地将str的所有旋转存储在数组中
    //通过得到concat的子字符串来获得旋转
    for(int i = 0; i < n; i ++)
        arr [i] = concat.substr(i,n);
  
    //排序所有旋转
    sort(arr,arr + n);
  
    //从排序数组中返回第一个旋转
    return arr [0];
}
  
//驱动程序来测试上面的功能
int main()
{
    cout << minLexRotation(“GEEKSFORGEEKS”)<< endl;
    cout << minLexRotation(“GEEKSQUIZ”)<< endl;
    cout << minLexRotation(“BCABDADAB”)<< endl;
}  

输出:

EEKSFORGEEKSG
EEKSQUIZG
ABBCABDAD

上述解决方案的时间复杂度为O(n 2 logn),假设我们使用了O(nLogn)排序算法。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例