贪心法之字典序最小问题

贪心法之字典序最小问题_第1张图片
贪心法之字典序最小问题_第2张图片

增加一个条件:使得最早得到字典序最小的字符串

思想:我每次都比较字符串开头和结尾,小的字符输出,我最终得到的就是字典序最小的字符串。

如果你是这样的思想对于没有我自己增加的条件来说是可以的。

修改后的思想:

  • 比较S和S’(S反转后的字符)看谁的字典序更小
  • 如果S较小,就从S的头部取出一个字符添加到T中
  • 如果S’较小,就从S的尾部取出一个字符添加到T中

代码实现:

#include 
#include 
using namespace std;
int n;
string s;
void solve(){
    int a = 0,b = n - 1;
    while(a <= b){
        bool l = false;
        for(int i = 0;a + i <= b;i++){
            if(s[a+i] < s[b-i]){
                l = true;
                break;
            }else if(s[a+i] > s[b-i]){
                l = false;
                break;
            }
        }
        if(l)   putchar(s[a++]);
        else    putchar(s[b--]);
    }

}


int main(){
    cin >> n;
    cin.ignore();
    cin >> s;
    solve();
    return 0;
}

你可能感兴趣的:(acm,C++,蓝桥杯)