最小字典序

给定一个长度为N的字符串S。

每次可以从S的开头或者结尾取出一个字符,放到一个T字符串的尾部。

输出字典序最小的T字符串,每80个字符换一行输出。

输入

第一行一个整数N(1 le N le 2000)N(1N2000)。

有N个字符,表示字符串S,只由大小写字母组成。

输出

每80字符一行输出最小字典序T。

样例

输入

复制
6
ACDBCB

输出

复制
ABCBCD

提示

子任务1,20分,1 le N le 101N10。

子任务2,30分,1 le N le 1001N100。

子任务3,50分,1 le N le 20001N2000。

#pragma warning(disable:4996)
#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
#define MAX 2001
using namespace std;

bool check(char* s, int l, int r)
{
    while (l <= r && s[l] == s[r])
    {
        l++;
        r--;
    }
    return s[l] < s[r];
}

int main()
{
    int n;
    char s[MAX], t[MAX];
    scanf("%d%s", &n, s);
    int l = 0, r = n - 1;
    int m = 0;
    while (l <= r)
    {
        t[m++] = check(s, l ,r) ? s[l++] : s[r--];
    }
    for (int i = 0; i < m; i++)
    {
        putchar(t[i]);
        if (i % 80 == 79)
        {
            putchar('
');
        }
    }
    return 0;
}
如果觉得有帮助,点个推荐啦~
原文地址:https://www.cnblogs.com/8023spz/p/15470346.html