题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
code
class Solution {
public:
string LeftRotateString(string str, int n) {
if(str=="")//字符串为空
return {};//返回空集合
int len=str.size();
n=n%len;//注意对n进行处理(n可能超过字符串长度)
string tmp1=str.substr(0,n);
string tmp2=str.substr(n);
return (tmp2+tmp1);
}
};
- 本题的坑是:要注意输入为空字符串时
- 主要应用了C++ string的取子串操作
str.sbustr(a,b):取str位置[a,b-1]的子串 str.substr(a):取str位置[a,n-1]的子串(n为str长度)
补充
C++ append函数
(在字符串string的后面追加字符或字符串)
参考链接:C++ string append方法的常用用法
- 添加字符串(指针)
string s = “hello “;
const char *c = “out here “;
s.append(c); // 把c类型字符串s连接到当前字符串结尾
s = “hello out here”;
- 添加字符串(指针)的一部分
string s=”hello “;
const char *c = “out here “;
s.append(c,3);
s = “hello out”;
- 添加字符串(string)
string s1 = “hello “;
string s2 = “wide “;
string s3 = “world “;
s1.append(s2);
//s1 = “hello wide “;
s1 += s3;
//s1 = “hello wide world “;
- 添加字符串string的一部分
string s1 = “hello “,s2 = “wide world “;
s1.append(s2, 5, 5);
//s1 = “hello world”;
string str1 = “hello “, str2 = “wide world “;
str1.append(str2.begin()+5, str2.end());
//str1 = “hello world”;
- 添加多个字符
string s1 = “hello “;
s1.append(4,’!’); //在当前字符串结尾添加4个字符!
s1 = “hello !!!!”;