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

来源:互联网 发布:vb format 时间 编辑:程序博客网 时间:2024/05/21 10:30
// 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与其反序比较,当比较到有一个小的时候,就选那个//       如果相同则无所谓取哪一个


1 0
原创粉丝点击