这是在原有字符串旋转的基础上进行的,比如说给定字符串的组合是:abcdef*hijkl;首先看怎么解决这个问题,然后在给出程序代码。
1,找到*的位置,这很简单,在o(n)时间内就可以找到,记为pos。
2,对*(包括*)之前的字符串进行旋转,结果为*fedcba
3,从*后的字符开始进行再次的旋转,结果为*abcdef加上原来的字符串,那么就是*abcdefhijkl。
从中可以看到,*移动了最左边,字母移动到*号后的相对位置没有更改,同时,可以用这种方法解决有多个*号的情况。但是如果是这个的移动的话或许在时间复杂度方面有缺陷,希望大家看后能够给出一些自己的想法,共同讨论,多谢。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void swap(char *begin,char *end)
{
char temp;
while(begin<end)
{
temp=*begin;
*begin=*end;
*end=temp;
begin++;
end--;
}
}
void move_string(char *str,int k,int len)
{//k is the position of * in string
swap(str,str+k);
swap(str+1,str+k);
}
int main(void)
{
char string[]="abcd*efgh*lmnopq*rst";
int len=strlen(string);
int i;
for(i=0;i<len;i++)
{
if(string[i]==

博客讨论了一个字符串处理问题,其中*号需移动到最左侧,字母移到最右侧且保持相对顺序不变。提出了一种解决方案,包括查找*号位置、两次旋转字符串,适用于多个*号的情况。博主邀请读者对时间复杂度进行思考和讨论。
最低0.47元/天 解锁文章
2235

被折叠的 条评论
为什么被折叠?



