今天刷反转字符串I和II,大家有兴趣可以点上看看题目要求,试着做一下。
我们直接看题解吧:
转字符串I
审题目+事例+提示:
需要原地修改数组
思路(双指针):
·设置left与right两个指针,left指向数组首元素,right指向数组尾元素
·当left<right交换元素
·然后两个指针向中间移动,即left++,right--
·结束,over
代码(C++):
class Solution {
public:
void reverseString(vector<char>& s) {
int n = s.size();
for (int left = 0, right = n - 1; left < right; ++left, --right) {
swap(s[left], s[right]);
}
}
};
注:C++可以用swap()函数
转字符串II
审题目+事例+提示:
可以原地修改数组
思路(模拟):
·从0开始每隔2k依次遍历
·这里可以用C++reverse()函数,
·begin取begin()+i,
·end()的话,最后2K位置+min(i+k,n),即若小于k,取n,若大于k且小于2k,取k。
(Java就要利用上面题解来调转了)
代码(C++):
class Solution {
public:
string reverseStr(string s, int k) {
int n = s.length();
for (int i = 0; i < n; i += 2 * k) {
reverse(s.begin() + i, s.begin() + min(i + k, n));
}
return s;
}
};