微软面试100题之26题:左旋转字符串
来源:互联网 发布:苹果cms解析教程 编辑:程序博客网 时间:2024/05/18 00:00
一 题目:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef 左旋转2 位得到字符串cdefab。请实现字符串左旋转的函数。
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef 左旋转2 位得到字符串cdefab。请实现字符串左旋转的函数。
要求时间对长度为n 的字符串操作的复杂度为O(n),辅助内存为O(1)。
二 解题思路
定义一种字符串转置操作XT--将字符串反转可以验证(XT)T=X (XY)T=YTXT 原有字符串为XY,左移后的字符串应该是YX 那么有(XTYT)T=(YT)T(XT)T=YX
三 代码
/*This is a free Program, You can modify or redistribute it under the terms of GNU*Description:字符串转置的应用--*定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字*符串abcdef 左旋转2 位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度*为n 的字符串操作的复杂度为O(n),辅助内存为O(1)。*Language: C++*Development Environment: VC6.0*Author: Wangzhicheng*E-mail: 2363702560@qq.com*Date: 2012/12/6*//*定义一种字符串转置操作XT--将字符串反转可以验证(XT)T=X (XY)T=YTXT原有字符串为XY,左移后的字符串应该是YX那么有(XTYT)T=(YT)T(XT)T=YX*/#include <iostream>#include <cstdlib>#include <string>#include <algorithm>using namespace std;class Solution {private:string str;void Reverse(string::iterator beg,string::iterator end) {while(beg!=end) {swap(*beg++,*--end);}}public:Solution(const string &input) {str=input;}void JustDoIt(int n) {if(n<0) {cerr<<"参数有误!"<<endl;exit(1);}if(n>str.size()) n-str.size();Reverse(str.begin(),str.begin()+n); //XTReverse(str.begin()+n,str.end()); //YTReverse(str.begin(),str.end()); //(XTYT)T}void show() {cout<<"左旋后的字符串是:"<<str<<endl;}};void main() {Solution s("Hello world, I am wangzhicheng");s.JustDoIt(2);s.show();}
下面我给出另一种程序:
#include <iostream>#include <algorithm>using namespace std; void reverse(char* str, int begin, int end){ int i = 0; while(i <= (end - begin) / 2) { swap(str[begin + i],str[end - i]); ++i; }} /* *len为字符串长度 *pivot为左移的字符串个数 *算法的思想是先对pivot左边的一部分字符串翻转,再对右边的一部分翻转 *最后对所有字符串翻转一次就行 */void rorate(char* str, int len, int pivot){ reverse(str,0,pivot - 1); reverse(str, pivot, len - 1); reverse(str, 0, len - 1);}
0 0
- 微软面试100题之26题:左旋转字符串
- 左旋转字符串 【微软面试100题 第二十六题】
- 左旋转字符串 【微软面试100题 第二十六题】
- 微软100题(26)左旋转字符串
- 程序员面试100题:左旋转字符串
- 微软面试100题---左旋字符串
- 微软之左旋转字符串
- 微软面试之 26 左旋右旋字符串
- 【刷题之路】左旋转字符串
- 【微软100题】定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。
- 【100题】第二十六 左旋转字符串
- 26、左旋转字符串
- 左旋转字符串(26)
- 牛客网刷题之左旋转字符串
- 【剑指Offer面试编程题】题目1362:左旋转字符串--九度OJ
- 算法面试-学习笔记-左旋转字符串
- 面试 42-2: 左旋转字符串
- 【100题】左旋转字符串-----整体翻转+局部再次翻转
- 学英语,“爱尚”让我找到了信心
- Cocos2d-x2.2使用Admob插屏广告教程(一):iOS篇
- 什么是memcached and 使用memcached实现session远程分布式存储
- PAT - 1004. 成绩排名 (20)
- SpringMvc国际化 根据不同请求调用不同的资源文件
- 微软面试100题之26题:左旋转字符串
- iOS通过ASIHTTPRequest提交JSON数据
- MySQL配置文件my.cnf详解附mysql性能优化方法
- 性能优化之Android布局优化
- 第六周作业1——利用哈夫曼编码英文字母表
- AWK 简明教程
- VS08 Word Excel
- leetcode难度及面试频率
- Myeclipse在debug时,鼠标移动到变量上无法显示变量值问题