題意:
定義一個完美的字元串表示為:字元串中沒有出現兩個相同的字元。
現在給出一個完美的字元串,求字典序比它大的最小的完美的字元串。
若沒有輸出-1
分析:
首先,如果給出的字元串長度不為26,那麼直接在其後加入一個最小的沒出現的字元,必然是字典序盡量小的。
再考慮長度已經為26的字元串,顯然不能再加入字元了,隻能将某個字元替換為在它後面的比它大的最小的字元,再将後面清空,就是最優的方案。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#define SF scanf
#define PF printf
#define MAXN 30
using namespace std;
char s[MAXN];
bool used[MAXN];
int main(){
SF("%s",s);
int len=strlen(s);
for(int i=;i<len;i++)
used[s[i]-'a']=;
for(int i=;i<;i++)
if(used[i]==){
PF("%s%c",s,i+'a');
return ;
}
for(int i=len-;i>=;i--){
int minid=-;
for(int j=i+;j<len;j++)
if(s[j]>s[i]&&(minid==-||s[minid]>s[j]))
minid=j;
if(minid!=-){
for(int j=;j<i;j++)
PF("%c",s[j]);
PF("%c",s[minid]);
return ;
}
}
PF("-1");
}