题目名称:最小的字符串
题目链接:最小的字符串
描述
给定一个字符串S,我们可以把最后一个字符和第一个字符连在一起,形成一个字符环。
从任意两个字符之间切开字符环都可以得到一个字符串,一共可以得到|S|个字符串。
请你找出其中字典序最小的字符串。
输入
一个之包含小写字母的字符串S。
1 <= |S| <= 100000
输出
一个字符串代表答案
样例输入
bacacab
样例输出
abbacac
解题思路
给定一条字符串,首尾相连,求从哪里断开的字符串有最小的字典序,直接套用模板即可
完整代码
#include<bits/stdc++.h>
using namespace std;
string s;
int solve(){
int i=0,j=1,l;
int m=s.length();
while(i<m&&j<m){
for(l=0;l<m;l++){
if(s[(i+l)%m]!=s[(j+l)%m]) break;
}
if(l>m) break;
if(s[(i+l)%m]>s[(j+l)%m]) i+=l+1;
else j+=l+1;
if(i==j) j=i+1;
}
return min(i,j);
}
int main()
{
cin>>s;
int m=solve();
for(int i=m;i<s.length();i++) cout<<s[i];
for(int i=0;i<m;i++) cout<<s[i];
return 0;
}