字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小 。
解析:从后往前查看字符串,用一个计数器统计*的个数,如果是*,count++,否则,如果count>0,相应的字符向后移count个。
#include<iostream>
using namespace std;
void Convert(char *str)
{
int n=strlen(str);
int count=0;
for(int i=n-1;i>=0;i--)
{
if(str[i]=='*')
count++;
else if(count>0)
str[i+count]=str[i];
}
for(i=0;i<count;i++)
str[i]='*';
}
int main()
{
char str[]="a*bc*d*ef";
Convert(str);
cout<<str<<endl;
return 0;
}