【面试题】左旋字符串
来源:互联网 发布:mac os x 10.6.8 dmg 编辑:程序博客网 时间:2024/04/28 06:15
程序员编程艺术集锦
题目描述:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef 左旋转2 位得到字符串cdefab。请实现字符串左旋转的函数,要求对长度为n 的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。
分析:
比如:1 2 3, 4 5 6, 7 8 左移3位,算法的过程是这样的,
第一轮:
1 2 3,4 5 6,7 8
4 2 3,7 5 6,1 8
第二轮:
4 2 3, 75 6, 18
4 5 3, 78 6, 12
第三轮:
4 5 3, 7 86, 1 2
4 5 6, 7 83, 1 2
第四轮:
3 1 2 左移1位
4 5 6, 7 8 3, 1 2
4 5 6, 7 8 1, 2 3
算法描述:string左移a位
StringLeftShift(string[0...n-1], a)
1 for i = 0 to a-1 do
2 t = string[i]
3 for j = i + a to n-1 do
4 string[j-a] = string[j]; j = j+a
5 string[j-a] = t
6 StringLeftShift(string[n-a...n-1], a - n%a)
代码
RESULT Algorithm25::StringLeftShift(char *str, int a) {int len = strlen(str);// a的范围限制在[0,len-1]assert(a >= 0);a %= len;if (a == 0) return R_SUCCEED;for (int i = 0; i < a; ++i) {char t = str[i];int j;for (j = i + a; j < len; j += a) {str[j-a] = str[j];}str[j-a] = t;}int b = len % a;if (b != 0) {StringLeftShift(str+(len-a), a-b);}return R_SUCCEED;}
0 0
- 【面试题】左旋字符串
- 22. 微软面试题:左旋字符串
- 面试题44:字符串的左旋操作
- 面试题42反转单词顺序VS左旋字符串(循环左移字符串)
- 面试题42:左旋转字符串
- 面试题42-2:左旋转字符串
- 字符串面试题系列之三:左旋转字符串
- 微软,Google面试题 (21) —— 左旋字符串(循环移位)
- 剑指offer面试题42翻转单词顺序VS左旋字符串
- 程序员面试题精选(21):左旋转字符串
- 面试题42:翻转单词顺序VS左旋转字符串
- 【剑指offer】面试题42:左旋转字符串
- 《剑指Offer》面试题:对字符串进行循环左移
- 面试题46:翻转单词顺序VS左旋转字符串
- 剑指offer面试题之左旋转字符串
- 剑指Offer----面试题42(2):左旋转字符串
- 面试题42:翻转单词的顺序,左旋转字符串
- 面试题42-题目2:字符串左旋转
- 17周 项目一
- linux文件操作命令
- The world of Linux is so interesting!
- UESTC 1171 Ants Run!
- Dajo遥控1.6
- 【面试题】左旋字符串
- UML类图详解
- hibernate add()函数不出现
- java 引入jar包机制
- 反编译apk
- Android Graphics - ColorFilter
- opencv查找轮廓
- 探究内存泄露
- 17-3 数组的排序