题目:
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部,请定义一个函数实现字符串
左旋转的功能。比如输入:"abcdefg"和数字2. 输出“cdefgab”。
解法:
标准解法:1、旋转字符串str[0]~str[num-1],再旋转str[num]~str[n-1],最后旋转整个str即可。
代码如下:
string LeftRotateString(string str, int n) {
if(str.empty()||str.size()==0||n<0)
return "";
reverse_str(str,0,n-1);
reverse_str(str,n,str.length()-1);
reverse_str(str,0,str.length()-1);
return str;
}
void reverse_str(string &str,int begin,int end)
{
while(begin<end)
swap(str[begin++],str[end--]);
}
2、第一次见到这个题,我个人的第一反应是类似求旋转字符串的问题。。例如abcd的旋转字符串可以
为abcd,bcda,cdab,dabc, 也就是abcd+abcd =“abcdabcd”的长度为4的子串。
new = str+str;
res = new[num]~new[num+n-1]
代码如下:
string LeftRotateString(string str, int n) {
string res,temp;
if(str.empty()||str.size()==0||n<0)
return res;
temp = str+str;
for(int i =n;i<n+str.length();i++)
res[i-n]=temp[i];
return res;
3、问题比较简单,方法很多。选取合适的。 其中1最佳, 是不需要额外空间的。理解方法的核心即可。
即:很多字符串的问题 都可以 通过两种常用方法解决:
(一) 旋转字符串
(二)构造str+str求得最终的res