字符串循环左移(右移)的2种算法(附图解析) |
您所在的位置:网站首页 › 循环左移和循环右移函数 › 字符串循环左移(右移)的2种算法(附图解析) |
字符串循环左移算法
问题描述:暴力法利用三次翻转巧妙实现
问题描述:
给定一个字符串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 |