题目描述:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
题目很简单,字符串的应用问题
Ⅰ 我的方法
单纯地先把前面取出来,删掉,加到后面。
代码:
class Solution {
public:
string LeftRotateString(string str, int n) {
string temp;
if(str.length() < n || str.length()==0)
return temp;
temp = str.substr(0,n);//获得从第0位开始的n个字符
str.erase(0,n);//删掉从第0位开始的n个字符
str += temp;
return str;
}
};
Ⅱ 更简洁一点的方法
代码:
class Solution {
public:
string LeftRotateString(string str, int n) {
int len = str.length();//这里保存str的原始长度很必要,因为最后不能返回str.length(),因为长度发生改变了
if(len < n || len==0)
return "";
n = n % len;
str += str;//因为最后只返回len长度,所以把str直接加在后面就可以
return str.substr(n,len);
}
};