// greedy 贪心算法
// 贪心算法是求当前最优解
// 题目:输入一个整数,然后在输入N长度的字符串,每次从字符串开头或者末尾取一个字母,
// 组成新的字符串,组成字符串的字典序最小
// 例:输入:6
// ACDBCB
// 输出: ABCBCD
#include <iostream>
using namespace std;
int main()
{
int N;
while(cin >> N && N)
{
char str[N + 1];
cin >> str;
int a = 0, b = N - 1;
while(a <= b)
{
bool left = false;
for(int i = 0; a + i <= b; i++)
{
if(str[a + i] < str[b - i])
{
left = true;
break;
}
else if(str[a + i] > str[b - i])
{
left = false;
break;
}
}
if(left)
cout << str[a++];
else
cout << str[b--];
}
}
return 0;
}
// 思路:比较两边的字典序大小,哪边小就取哪边
// 如果开头与末尾相同的话,就将字符串str与其反序比较,当比较到有一个小的时候,就选那个
// 如果相同则无所谓取哪一个
字典序最小问题--贪心入门
最新推荐文章于 2024-08-01 09:55:56 发布