题意:
解法:
1.如果长度<26,那么在末尾添加一个未出现且最小的字符即可.
2.如果长度=26,那么必然有一个位置要变大,
显然优先变大末端的字符才能使得字典序最小,
因此从后往前遍历,
对于位置i,从i+1之后的字符中找到一个比s[i]大的最小字符,
替换s[i]即可.
code:
#include <bits/stdc++.h>
#define int long long
#define PI pair<int,int>
using namespace std;
const int maxm=2e6+5;
void solve(){
string s;cin>>s;
int n=s.size();
if(n<26){
map<char,int>mp;
for(auto i:s)mp[i]++;
for(char i='a';i<='z';i++){
if(!mp[i]){
cout<<s<<i<<endl;
return ;
}
}
}else{
map<char,int>mp;
mp[s[n-1]]++;
for(int i=n-2;i>=0;i--){
for(char j=s[i]+1;j<='z';j++){
if(mp[j]){
for(int k=0;k<i;k++){
cout<<s[k];
}
cout<<j<<endl;
return ;
}
}
mp[s[i]]++;
}
}
cout<<-1<<endl;
}
signed main(){
ios::sync_with_stdio(0);
solve();
return 0;
}