字符串反转之——手摇算法
2015-07-31 10:05
204 查看
手摇算法(也叫三次反转算法)
看题:将字符串abcdefg,变成efgabcd,要求空间复杂度O(1)。
解答:
第一步:将子串abcd反转,变成dcba。源字符串变成dcbaefg
第二步:将字串efg反转,变成gfe。源字符串变成dcbagfe
第三步:将整个字符串dcbagfe反转,变成efgabcd。
手摇算法常常被用来旋转字符串。同时,手摇算法也可以用来做原地归并排序,实现空间O(1).
核心代码:
看题:将字符串abcdefg,变成efgabcd,要求空间复杂度O(1)。
解答:
第一步:将子串abcd反转,变成dcba。源字符串变成dcbaefg
第二步:将字串efg反转,变成gfe。源字符串变成dcbagfe
第三步:将整个字符串dcbagfe反转,变成efgabcd。
手摇算法常常被用来旋转字符串。同时,手摇算法也可以用来做原地归并排序,实现空间O(1).
核心代码:
void shiftBlocks(int arr[], int start, int pos, int end) { reverse(arr,start,pos-1); reverse(arr,pos,end); reverse(arr,start,end); } void reverse(int arr[], int start, int end) { for(int i=start, j=end; i<j; i++,j--) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } }
相关文章推荐
- hdu5328
- 【暑期基础】M HDU 2012 素数判定
- Let the Balloon Rise
- Wi-Fi 定位的原理
- Android ContentObserver 监听图库变化
- 读SAFEARRAY,内容是BSTR一维数组
- 暑假训练-个人赛第五场
- Trapping Rain Water
- 02_js中接口的定义和使用
- HDU 1829 A Bug's Life
- Spring_配置文件格式介绍--真的蛮详细
- HDU 5326 Work(求每个人的下属,直接和间接)
- Git使用总结(win7)
- 面向对象设计原则详解:单一职责原则
- tomcat
- 【暑期基础】L HDU 2011 多项式求和
- 【暑期基础】K HDU 2010 水仙花数
- 使用Qt显示openCV矩阵图片
- 南阳oj106 背包问题
- [VBS]遍历XML文档