[算法]1.字符的翻转问题

来源:互联网 发布:mac卡住了怎么办 编辑:程序博客网 时间:2024/05/04 00:22

题目

原始字符串为”abcdef”,请设计算法转换为”defabc”。

思路一

初始的想法可以是可以通过暴力转换的方式去实现。通过观察原始字符串和目标字符串的区别可以发现,转换的过程可以看作是字符串的循环移动过程;将原始字符串往前移动3个位置就可以实现目标。有了思路就可以实现具体的代码了:

  char origin[]="abcdef";  for(int i=0;i<3;i++){    char tempchar(origin1[0]);    for(int i=0;i<6;i++){      origin1[i]=origin[i+1];    }    origin[5]=tempchar;  }  cout<<"origin1:"<<origin1<<endl;// space o(1) time o(m*n)

本思路的空间复杂度为O(1),时间复杂度O(n)。

思路二

再仔细观察原始和目标字符串之间的区别,可以发现它们之间的区别其实就是第一位开始依次与后3位的字符互换。因此可以编写如下的代码:

  char origin[]="abcdef";   for(int i=0;i<3;i++){    char tt;    tt=origin2[i];    origin2[i]=origin2[i+3];    origin2[i+3]=tt;  }  cout<<"origin2:"<<origin2<<endl;// space o(1) time o(n)

本思路的空间复杂度为O(1),时间复杂度为O(n).

思路三

对于原始字符串可以理解为以中间字符为中心翻转之后达到目标字符串。

  • 第一步:abc进行旋转,旋转之后成为cba;
  • 第二步:def进行旋转,旋转之后成为fed;
  • 第三步:将部分翻转之后的字符串cbafed进行反转,翻转之后为:defabc达到目标。

实现代码如下:

  char origin[]="abcdef";  int from=0;  int to=2;  while(from<to){    char temp=origin3[from];    origin[from]=origin3[to];    origin[to]=temp;    from++;    to--;   }   from=3;   to=5;   while(from<to){     char temp=origin[from];     origin[from]=origin3[to];     origin[to]=temp;     from++;     to--;   }   from=0;   to=5;   while(from<to){     char temp=origin[from];     origin[from]=origin3[to];     origin[to]=temp;     from++;     to--;   }  cout<<"origin3:"<<origin3<<endl;// space o(1) time o(n)}

本思路的时间复杂度为O(n),空间复杂度为O(1)。

最后附上详细的代码:

#include <iostream>int main(){    //思路1      char origin1[]="abcdef";    char des[]="defabc";    for(int i=0;i<3;i++){    char tempchar(origin1[0]);    for(int i=0;i<6;i++){      origin1[i]=origin1[i+1];    }    origin1[5]=tempchar;    }    cout<<"origin1:"<<origin1<<endl;// space o(1) time o(m*n)    //思路2   char origin2[]="abcdef";    for(int i=0;i<3;i++){        char tt;        tt=origin2[i];        origin2[i]=origin2[i+3];        origin2[i+3]=tt;    }    cout<<"origin2:"<<origin2<<endl;// space o(1) time o(n)    //思路3   char origin3[]="abcdef";   int from=0;   int to=2;   while(from<to){       char temp=origin3[from];       origin3[from]=origin3[to];       origin3[to]=temp;       from++;       to--;   }   from=3;   to=5;   while(from<to){       char temp=origin3[from];       origin3[from]=origin3[to];       origin3[to]=temp;       from++;       to--;   }   from=0;   to=5;   while(from<to){       char temp=origin3[from];       origin3[from]=origin3[to];       origin3[to]=temp;       from++;       to--;   }   cout<<"origin3:"<<origin3<<endl;// space o(1) time o(n)}

输出为:

origin1:defabcorigin2:defabcorigin3:defabc
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 管子太多每次洗澡都是冷水怎么办 热水冷水装反了怎么办 大树被高锰酸钾灌溉了怎么办会死吗 防盗门门被锁了怎么办 门被里面反锁了怎么办 门里面被锁了怎么办 被锁在门里怎么办 门锁住了没钥匙怎么办 车被别人锁住了怎么办 汽车轱辘被锁了怎么办 小车轮胎被锁了怎么办 国防光缆无明显标识被挖断怎么办 临工210挖掘机柴油进气怎么办 汽车抛光蜡干了怎么办 洗碗铁丝球吃了怎么办 牙套铁丝吃肚子怎么办 小铁丝吃到肚子怎么办 绿色抛光膏干了怎么办 不锈钢被盐酸弄黑了怎么办 不锈钢被草酸洗了怎么办 不锈钢洗菜盆被草酸腐蚀了怎么办 汽油发电机加了柴油怎么办 装载机发动机加入齿轮油怎么办 印尼的FromE错了怎么办 寄快递被弄坏了怎么办 福田口岸手表被扣怎么办? 网页显示与服务器连接失败怎么办 唯品会中发货无法清关怎么办 国际快递被海关扣了怎么办 我想开一家物流公司手续怎么办? 物流公司把我的货弄丢了怎么办 物流公司压司机工资怎么办 立元增压泵不出水怎么办 高浊度pac不沉怎么办 集水池中沉积大量污泥怎么办 电脑qq截图不好使怎么办 捡了个手机需要指纹怎么办 手机锁屏锁住了怎么办 三星屏锁忘记了怎么办 文字下面有蓝色直线怎么办 苹果x不能截屏了怎么办