首页 > 学院 > 开发设计 > 正文

LintCode 8 旋转字符串

2019-11-08 18:45:58
字体:
来源:转载
供稿:网友

题目:rotateString


要求:

给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)

样例:

对于字符串 "abcdefg".offset=0 => "abcdefg"offset=1 => "gabcdef"offset=2 => "fgabcde"offset=3 => "efgabcd"

算法要求:

在数组上原地旋转,使用O(1)的额外空间

解题思路:

用直接定位法,来进行每个字符的定位。可以理解城对号入座,只需要进行n-1次就可以了。此算法的时间复杂度为O(n),进行n-1次交换。

算法如下:

void rotateString(string &str, int offset) { int length = str.length(); int now = 0;//当前last位置所代表字符的初始位置 int last = 0;//考虑到可以能重复循环,用来记录是否重复了, char tempStr; if (length == 0 || str == NULL) { return; } if (offset >= length) { offset = offset % length; } if (offset == 0) { return; } else { for (int i = 1; i < length ; i++) { tempStr = str[abs((offset + now) % length)]; str[abs((now + offset) % length)] = str[last]; str[last] = tempStr; now = abs((offset + now) % length); if (now == last) {//如果重复操作了,就进行+1操作 last++; now = last; } } } }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表