您的位置:首页 > 其它

UVA 146 ID Codes

2016-07-26 21:08 393 查看

UVA-146

题意:给出一个字符串,求它按字典序的下一个串。

解题思路:从后往前找到第一个不满足s[i] >= s[i+1]的位置,用i+1到end中比s[i]大的中最小的那个替换s[i],剩下的i+1到end的字母从小到大排序。

/*************************************************************************
> File Name: UVA-146.cpp
> Author: Narsh
>
> Created Time: 2016年07月26日 星期二 15时33分08秒
************************************************************************/

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
bool cmp(char a,char b) {
return a<b;
}
string s;
int main() {
while (true) {
cin>>s;
if (s[0] == '#') break;
int l=s.length(),end;
end=l;
s=" "+s;
while ( l > 1  && s[l] <= s[l-1]) l--;
if (l <= 1) {
printf("No Successor\n");
continue;
}
for (int i = end; i >= l; i--)
if (s[i] > s[l-1]) {
char k=s[i];
s[i]=s[l-1];
s[l-1]=k;
break;
}
sort(&s[0]+l,&s[0]+1+end,cmp);
for (int i = 1; i <= end; i++)
printf("%c",s[i]);
printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: