左旋转字符串
来源:互联网 发布:斑马标签机打印软件 编辑:程序博客网 时间:2024/05/16 15:01
左旋转字符串
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾 部,如把字符串 abcdef 左旋转 2 位得到字符串 cdefab。请实现字符串左旋转的 函数,要求对长度为 n 的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。
思路:三步反转法
将一个字符串分成两部分,X 和 Y 两个部分,在字符串上定义反转的操作 X^T, 即把 X 的所有字符反转(如,X=”abc”,那么 X^T=”cba”),那么我们可以得到 下面的结论:(X^TY^T)^T=YX。显然我们这就可以转化为字符串的反转的问题了。不是么?ok,就拿 abcdef 这个例子来说,若要让 def 翻转到 abc 的前头,那 么只要按下述 3 个步骤操作即可:
1、首先分为俩部分,X:abc,Y:def;
2、X->X^T,abc->cba, Y->Y^T,def->fed。
3、(X^TY^T)^T=YX,cbafed->defabc,即整个翻转。
PHP代码实现
function reverseString(&$str, $from, $to) { while ($from < $to) { $tmp = $str[$from]; $str[$from++] = $str[$to]; $str[$to--] = $tmp; }}function rotateString(&$str, $n, $m) { $m %= $n; reverseString($str, 0, $m - 1); reverseString($str, $m, $n - 1); reverseString($str, 0, $n - 1);}$str = 'abcdef';rotateString($str, 6, 2);echo $str;
阅读全文
0 0
- 左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 26.左旋转字符串
- 第一章、左旋转字符串
- 字符串的左旋转
- 第一章、左旋转字符串
- 第一章、左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 26、左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 数据库SQL优化大总结之 百万级数据库优化方案
- SpringBoot中常用注解@ PathVaribale / @ RequestParam / @ GetMapping介绍 本篇博文将介绍几种如何处理URL中的参数的注解@ PathVariba
- Codeforces Round #394 (Div. 2) D. Dasha and Very Difficult Problem —— 贪心
- DispatchAction和ForwardAction的使用
- (转)布局文件中fill_parent和match_parent有什么区别?
- 左旋转字符串
- HTTPS的工作流程的理解
- Python--多线程编程--生产者消费者模型
- v-model和v-for指令
- QT使用QFileInfo类来获取文件信息
- Openstack4J API初体验之Authentication
- Leetcode Evaluate Reverse Polish Notation
- July Challenge 2017 | Whats in the Name
- 安卓/Android 模仿支付宝/微信 支付密码输入框的自定义View