剑指 Offer 58 - II. 左旋转字符串
这道题方法很多,最简单的肯定是字符串切片。但是字符串切片实在是过于简单且不包含任何算法思想,除了会使面试官印象分大打折扣,还有另外一个弊端:与旋转字符串同类型的题目旋转数组在C++中是无法使用切片操作的。所以最好还是使用遍历替换或者分段reverse的方法。
LeetCode链接: 剑指 Offer 58 - II. 左旋转字符串
分段reverse
class Solution {
public:
string reverseLeftWords(string s, int n) {
int len = s.size();
if(!len)
return "";
n = n % len;
reverse(s, 0, len - 1);
reverse(s, 0, len - n - 1);
reverse(s, len - n, len - 1);
return s;
}
void reverse(string &s, int l, int r){
if(l >= r)
return ;
while(l < r){
swap(s[l], s[r]);
l ++ ;
r -- ;
}
}
};