您的位置:首页 > 其它

字典序最小问题--贪心入门

2016-03-14 23:18 239 查看
// 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与其反序比较,当比较到有一个小的时候,就选那个
//       如果相同则无所谓取哪一个
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: