字典序最小問題--貪心入門

// 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與其反序比較,當比較到有一個小的時候,就選那個
//       如果相同則無所謂取哪一個


發佈了42 篇原創文章 · 獲贊 15 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章