字符串本质就是数组,采用双指针的方法,一个在前一个在后即可,不断交换。
而还有一个点是,字符串有奇数偶数的情况,我们可以用一个i<s.size()/2,这样奇数最后中间的就遍历不到,而偶数自然就能全部交换
class Solution {
public:
void reverseString(vector<char>& s) {
for(int i=0,j=s.size()-1;i<s.size()/2;i++,j--){
swap(s[i],s[j]);
}
}
};
思路:问题是在于处理每经过2k要反转前k个字符,若是利用for循环中i+=2*k,即可遍历每次起点,再利用reverse即可。而<2k其实不用判断,因为只要剩余的大于k,那么就翻转前k个即可,若小于k则直接翻转(比如剩余k+1个话,直接就翻转前k个,然后最后一个不用管了,直接return即可,最后一个不算是少于k个的,因为其在遍历的2k个元素内)
class Solution {
public:
string reverseStr(string s, int k) {
for(int i=0;i<s.size();i+=2*k){
if(i+k<s.size()){
reverse(s.begin()+i,s.begin()+i+k);
}
else{
reverse(s.begin()+i,s.end());
}
}
return s;
}
};
马上就出考研成绩了,希望能进复试吧!!许愿一下,然后继续坚持刷题