字符串为*号和26个字母的任意组合,把 *号都移动到最左侧,把字母移到最右侧并保持相对顺序不变,要求时间和空间复杂度最小。
#include <stdio.h>
#include <stdlib.h>
#define SIZE 100
int main(void) {
char str[SIZE] = "*hel***lo**wor*ld*";
int len = strlen(str);
//找到最后*的下标
int index = len - 1;
while (*(str + index) != '*') {
index--;
}
int i;
for (i = index - 1; i >= 0; --i) {
if (str[i] != '*') {
str[index--] = str[i];
str[i] = '*';
}
}
puts(str);
return EXIT_SUCCESS;
}