您的位置:首页 > 其它

字典序最小问题 (贪心)

2016-02-29 10:07 169 查看
输入:

n=6

S="ACDBCB"

输出:

ABCBCD

不断取S的开头和末尾中较小的一个字符放到T的末尾

1.按照字典序比较S和将S反转后的字符串'S'.

2.如果S较小,就从S的开头取出一个文字,追加到T的末尾.

3.如果S较小,就从S的末尾取出一个文字,追加到T的末尾.

const int MAX_N=100000;

int N;
char S[MAX_N];

void solve()
{
int a=0,b=N-1;
while(a<=b){
//将从左起和右起的字符串比较
bool left=false;
for(int i=0; a+i<=b; i++){
if(S[a+i]<S[b-i]){
left=true;
break;
}
else if(S[a+i]>S[b-i]){
left=false;
break;
}
}
if(left)   putchar(S[a++]);
else   putchar(S[b--]);
}
}


<<挑战程序设计竞赛>>读后感
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: