旋转字符串
2015-08-05 16:32
453 查看
旋转字符串
查看运行结果
22%通过
给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)
样例
对于字符串
"abcdefg".
offset=0 => "abcdefg" offset=1 => "gabcdef" offset=2 => "fgabcde" offset=3 => "efgabcd"
挑战
在数组上原地旋转,使用O(1)的额外空间
---------------------------------------------------------------------------------------------------------------------------------------------------------------
1.通过分析,就是把后offset个字符连接到字符串头部
实现:
string rotateString(string A, int offset) { // wirte your code here if ( A == "") return A; if (offset > A.size()) offset = offset%A.size(); A = (A + A.substr(0, A.size() - offset)).substr(A.size()-offset); return A; }
-------------------------------------------------------------------------------------------------------------------
2.设一个字符串被offset分为了两部分XY。所以要做的是(XY)T T是上标,转置 =YX
YX=((X)T(Y)T)T
所以先对字串X和Y进行转置,然后在对整串进行转置。就是想要的结果。
字符串转置:定义begin 和 end 分别指向头尾.while(begin<end) swap(begin,end);
算法实现:
string rotateString(string A, int offset) { if (A == "") return A; if (offset > A.size()) offset = offset%A.size(); char tmp; int begin = 0, end = A.size() - offset - 1; while (begin < end) { tmp = A[begin]; A[begin++] = A[end]; A[end--] = tmp; } begin = A.size() - offset, end = A.size() - 1; while (begin < end) { tmp = A[begin]; A[begin++] = A[end]; A[end--] = tmp; } begin = 0, end = A.size() - 1; while (begin < end) { tmp = A[begin]; A[begin++] = A[end]; A[end--] = tmp; } /*rota(A, 0, A.size() - offset-1); rota(A, A.size() - offset, A.size() - 1); rota(A, 0, A.size() - 1);*/ return A; }注释的部分是试用函数来实现转置:
void rota(string &str, int begin, int end) { char tmp; while (begin < end) { tmp = str[begin]; str[begin++] = str[end]; str[end--] = tmp; } }
不用函数的方法速度要快很多。
相关文章推荐
- 一个批量安装文件夹下(包括子目录下)全部的Android apk文件批处理脚本
- Openjudge1288 The Rotation Game(dfs)
- Java游戏之碰撞检测
- webuploader
- hdu 2054 A == B ? (java)
- 字典中添加不同类型的值(ios)
- 举例详解Python中yield生成器的用法
- LeetCode #26 Remove Duplicates from Sorted Array
- NUC100RE3AN串口驱动库修改
- iOS App提交指南-协议、税务和银行业务
- 基于caffe特征可视化 以及 用训练好的模型进行分类
- JVM参数分析(精)
- OA强大的考勤管理
- lingo中对start(@wrap(J+I+2,7))) >= required(J))的理解
- 简洁的发包--网络游戏
- 制作网页雪花飘飘效果
- html的标签3
- zoj 2676 Network Wars 最小割+0-1分数规划
- Linux内核设计与实现——读书笔记2:进程管理
- hash+set Codeforces Round #291 (Div. 2) C. Watto and Mechanism