字符串循环左移(右移)的2种算法(附图解析)

您所在的位置:网站首页 循环左移和循环右移函数 字符串循环左移(右移)的2种算法(附图解析)

字符串循环左移(右移)的2种算法(附图解析)

#字符串循环左移(右移)的2种算法(附图解析)| 来源: 网络整理| 查看: 265

字符串循环左移算法 问题描述:暴力法利用三次翻转巧妙实现

问题描述:

给定一个字符串s[0…n-1],要求将s的前k个字符移动到字符串s的尾部。 举个栗子:将字符串“HelloWorld”的前5个字符移动到字符串的尾部,即要得到的新串为:“WorldHello”;即将字符串的循环左移k位

顺便bb:循环左移k位,等价于循环右移n-k位(n位字符串长度)

暴力法

思路:不是循环左移k位吗,那么就简单粗暴的一位一位的移动就是了。将首位暂存,后面的依次前移,最后将首位放到最后,就循环左移了1位,调用k次这个方法,就循环左移了k位。

C++代码:

//循环左移一位,s位字符数组,n为长度 void OneLeftMove(char *s, int n) { char char0 = s[0];//暂存第一个字符 for (int i = 1; i for (int i = 0; i while (from k %= n;//求模,例如字符串共5位,要右移7位,就和移动2位是一样,取模防止越界 ReverseString(s, 0, k - 1); ReverseString(s, k, n - 1); ReverseString(s, 0, n - 1); }

代码解析: 翻转算法很简单,从两边到中间一次交换就是了。 下面的三次翻转,就是分别将前半部分,后半部分,和整体在进行翻转就是了,整体非常简单。 注意可以k %= n;取模防止越界

该算法时间复杂度:O(n),空间复杂度:O(1)

##结束语 相互学习,共同进步。若有错误,希望各位看官批评指正!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3