#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/* 字符的左右移动
字符串移动(字符串为’*’号和26个字母的任意组合,
把’*’号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小.
本解:用多开两个数组,分别保存*和字母
*/
int main()
{
char str1[99]="*abcde*fghi**";
int str1Length=strlen(str1);
char str2[99]="";//保存*
char str3[99]="";//保存字母
for(int i =0,j=0,k=0;i<str1Length;++i){
if(str1[i]=='*'){
str2[j++]=str1[i];
}
else{
str3[k++]=str1[i];
}
}
int str2Length=strlen(str2);
int str3Length=strlen(str3);
for(int i=0;i<str1Length;){
int j=0;
while(j<str2Length){
str1[i++]=str2[j++];
}
int k=0;
while(k<str3Length){
str1[i++]=str3[k++];
}
}
printf("%s",str1);
return 0;
}
字符串移动(字符串为’*’号和26个字母的任意组合, 把’*’号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小
最新推荐文章于 2021-05-28 21:56:25 发布