左旋转字符串程序

来源:互联网 发布:淘宝美工难学吗 编辑:程序博客网 时间:2024/04/30 03:01

一 问题描述

定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串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();}


 

四 测试:

 

原创粉丝点击