题目描述:汇编语言中有一种移位指令叫做循环左移(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); } };