左旋转字符串程序
来源:互联网 发布:淘宝美工难学吗 编辑:程序博客网 时间: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();}
四 测试:
- 左旋转字符串程序
- 左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 26.左旋转字符串
- 第一章、左旋转字符串
- 字符串的左旋转
- 第一章、左旋转字符串
- 第一章、左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 26、左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 浏览器的渲染模式
- 关于网络标准协会
- 移植仙剑游戏到redhat
- 15周,折腾的二维数组
- 短信ui--会话编辑界面(五)彩信附件
- 左旋转字符串程序
- 中国古代十大名曲
- 数据库优化-表拆分
- C# 用“WebKit.NET”封装内核浏览器
- 简易电子词典
- 数据库拆分?
- 窗口的美化
- poj 2777 Count Color
- 超小u盘装centos系统