左旋字符串
题目描述:
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。
时间限制:1s;空间限制:32768K
思路:思路都在代码注释里面
此次编程用到的函数:
reverse函数具体用法的链接:http://www.cplusplus.com/reference/algorithm/reverse/
substr函数具体用法的链接:http://www.cplusplus.com/reference/string/string/substr/
swap函数具体用法的链接:http://www.cplusplus.com/reference/utility/swap/?kw=swap
class Solution {
public:
string LeftRotateString(string str, int n) {
//方法一:相加的方法,实现左移
/*string l,r;
for(int i=0;i<n;i++) r+=str[i];//eg:a+b+c
for(int i=n;i<str.size();i++) l+=str[i];//X+Y+Z+d+e+f
return l+r;*/
//方法二:
// reverse的用法:翻转的是起点和终点这段区间 和sort用法类似
/* reverse(str.begin(), str.end());//fedZYXcba
reverse(str.begin(), str.begin() + str.size() - n);//XYZdefcba
reverse(str.begin() + str.size() - n, str.end());//XYZdefabc
return str;*/
// 方法三:substr函数的作用:返回一个从指定位置开始,并具有指定长度的字符串
/*int len = str.length();//求得字符串长度
if(len == 0) return "";//判空
n = n % len;//eg:3%9==3
str += str;//str=abcXYZdefabcXYZdef
return str.substr(n, len);*///XYZdefabc
//方法四:swap函数的用法:交换,等我学习了具体的使用,再来写博客,这个基本用法就是交换,
//可以实现两个字符串的交换,也可以实现同一个字符串的交换,也可以实现两个变量的交换,
//也可以通过传值,传址,传引用的,实现交换
//(1)先将左边 3 个字符串进行翻转:abcXYZdef --> cbaXYZdef
//2)再将右边剩余字符串进行翻转:cbaXYZdef --> cbafedZYX
//(3)最后将整个字符串进行翻转: cbafedZYX --> XYZdefabc
int len = str.size();
if(len == 0)
return str;
n %= len;//eg:3%9==3
for(int i = 0, j = n - 1; i < j; ++i, --j)
swap(str[i], str[j]);//从a到c交换,abcXYZdef --> cbaXYZdef
for(int i = n, j = len - 1; i < j; ++i, --j)
swap(str[i], str[j]);//从X到f交换,cbaXYZdef --> cbafedZYX
for(int i = 0, j = len - 1; i < j; ++i, --j)
swap(str[i], str[j]);//从c到X交换, cbafedZYX --> XYZdefabc
return str;
//方法五:最基本的,和方法四类似
//(1)先将左边 3 个字符串进行翻转:abcXYZdef --> cbaXYZdef
//2)再将右边剩余字符串进行翻转:cbaXYZdef --> cbafedZYX
//(3)最后将整个字符串进行翻转: cbafedZYX --> XYZdefabc
/*void fun(string &s,int start,int end)
{
char temp;
while(start<end)
{
temp=s[start];
s[start]=s[end];
s[end]=temp;
start++;
end--;
}
}
string LeftRotateString(string str, int n) {
int len=str.length();//求得字符串长度
if(0==len || 0==n)//判空
return str;
string &temp=str;
fun(temp,0,n-1);//从a到c交换,abcXYZdef --> cbaXYZdef
fun(temp,n,len-1);//从X到f交换,cbaXYZdef --> cbafedZYX
fun(temp,0,len-1);//从c到X交换, cbafedZYX --> XYZdefabc
return str;*/
}
};