一道简单的贪心题,每次都从两端开始找,找到一个小的就放到T的末尾,然后再重新寻找。
需要注意的是相等的情况,比如这三种情况 AABAA, AABCAA, AACBAA。因为两边相等,所以需要继续向下判断,直到找到一个不相等的,但是如果用递归的话太慢了,本题就是通过一个循环来进行寻找,这也是循环中为什么没有等于的条件的原因。
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int main()
{
int n = 0, cnt = 0;
vector<char> initial;
char d = '\0';
scanf("%d", &n);
int a = 0, b = n - 1;
for (int i=0; i<n; i++)
{
getchar();
scanf("%c", &d);
initial.push_back(d);
}
while (a<=b)
{
bool flag = false;
for (int i=0; a+i<=b; i++)
{
if (initial[a+i] > initial[b-i])
{
flag = true;
break;
}
else if (initial[a+i] < initial[b-i])
{
flag = false;
break;
}
}
if (flag == true)
{
printf("%c", initial[b--]);
cnt++;
}
else
{
cnt++;
printf("%c", initial[a++]);
}
if (cnt%80 == 0)
{
printf("\n");
}
}
return 0;
}