22. 微软面试题:左旋字符串
来源:互联网 发布:纺织erp软件 编辑:程序博客网 时间:2024/04/30 15:19
题目:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
例如把字符串"abcdef" 左旋2位 得到字符串“cdefab"。请实现字符串左旋转的函数。
要求时间对长度n的字符串操作的复杂度位O(n),辅助内存为O(1).
分析:
这题的难点是辅助内存只能只用O(1),相当于只能进行字符串中字符的替换操作,如果需要移动字符串,则需要m*n次替换操作,这样复杂度也上来了,O(n*n).
只能想技巧了。
实现如下:
#include<iostream>#include<string.h>using namespace std;void reverse(char* str, int i, int j){ while( i < j) { char chr = str[i]; str[i] = str[j]; str[j] = chr; i ++; j --; }}void leftRotate(char* srcstr, int k){ int len = strlen(srcstr); if(len <= 1) return; k = k%len; reverse(srcstr, 0, k - 1); reverse(srcstr, k, len -1); reverse(srcstr, 0, len -1);}int main(){ char str[] = "abcdef"; cout << "string: " << str << endl; leftRotate(str, 2); cout << "rotate string, 2: " << str << endl; return 0;}
输出结果如下:string: abcdef
rotate string, 2: cdefab
0 0
- 22. 微软面试题:左旋字符串
- 【面试题】左旋字符串
- 微软,Google面试题 (21) —— 左旋字符串(循环移位)
- 微软面试题:反转字符串
- 面试题44:字符串的左旋操作
- 面试题42反转单词顺序VS左旋字符串(循环左移字符串)
- 面试题42:左旋转字符串
- 面试题42-2:左旋转字符串
- 微软面试题——反转字符串
- 微软字符串面试题(转)
- 字符串转换成整数-微软面试题
- 字符串面试题系列之三:左旋转字符串
- 微软面试100题---左旋字符串
- 剑指offer面试题42翻转单词顺序VS左旋字符串
- 程序员面试题精选(21):左旋转字符串
- 面试题42:翻转单词顺序VS左旋转字符串
- 【剑指offer】面试题42:左旋转字符串
- 《剑指Offer》面试题:对字符串进行循环左移
- Python实现各类数据结构和算法----归并排序
- 玩转Web之Json(一)-----easy ui+ajax + json 中关于Json的解析问题
- 数习算法的网站
- hdu 1698 线段树-成段更新
- Android学习笔记(三)模拟器的搭建
- 22. 微软面试题:左旋字符串
- 学习笔记 --- LINUX内核里面的IS_ERR宏解析
- java 第十天 面向对象(高级篇之final与抽象类)
- iOS UITableViewCell重用问题
- Jdk1.6新特性
- js map
- java中的类!
- ThinkPHP学习(三)配置PHP5支持MySQL,连接MySQL数据库
- ORACLE 日期相关函数