给定长度为N的字符串S,要求构造一个字典序最小的字符串T。
#include <cstdio>
const int MAXN = 2000;
char s[MAXN+2];
char t[MAXN+2];
int main()
{
int n;
scanf("%d", &n);
getchar();
int i;
for (i = 0; i < n; i++) {
scanf("%c", &s[i]);
getchar();
}
int a = 0;
int b = n-1;
int j = 0;
while (a <= b) {
bool left = false;
for (i = 0; a + i <= b; i++) {
if (s[a+i] < s[b-i]) {
left = true;
break;
}
else if (s[a+i] > s[b-i]) {
left = false;
break;
}
}
if (left) {
t[j++] = s[a++];
}
else
t[j++] = s[b--];
}
i = 0;
while (n--) {
printf("%c", t[i++]);
if (i % 80 == 0) {
putchar('\n');
}
}
putchar('\n');
return 0;
}
比较字符串s的首尾两个的大小,取较小的那个放入字符串t。当首尾字符大小相等时,比较它们下一个字符,取小的放入字符串t。
字典序比较类的问题经常能用得上贪心法。