字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小
void fun(char a[], int n)
{
int q = n;
int p = n;
bool firstTime = true;
while (true)
{
int i = q-1;
for (; i >= 0; i--)
{
if (a[i] == '*')
{
q = i;
break;
}
}
if (i < 0)
{
break;
}
p = (firstTime || (p >= q))? q-1 : p-1;
firstTime = false;
int j = p;
for (; j >= 0; j--)
{
if (a[j] != '*')
{
p = j;
break;
}
}
if (j < 0)
{
break;
}
swap(a[p], a[q]);
}
}