一、刷题
力扣27,移除元素
本体的主要思路和之前的移除字符串中的多余空格一样,使用双指针,如果碰到目标元素则fast++,然后将fast的值赋给slow
整体代码:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int fast = 0;
int slow = 0;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] == val) {
fast++;
continue;
} else {
nums[slow] = nums[fast];
slow++;
fast++;
}
}
return slow;
}
力扣541,反转字符串Ⅱ
本题的主要思路是对for循环中参数的设置,将i++换成i+=2k即可,然后对两种情况进行判断
整体代码:
class Solution {
public:
string reverseStr(string s, int k) {
for (int i = 0; i < s.size(); i += (2 * k)) {
//1、如果i+k小于等于size则说明在(i,1+2k)这个范围里面(i,i+k)时可以全部反转的
//2、如果i+k大于size说明后面的不够k了,则将后面全部反转
if (i + k <= s.size()) {
reverse(s.begin() + i, s.begin() + i + k);
} else {
reverse(s.begin() + i, s.end());
}
}
return s;
}
};
剑指offer58,左旋字符串
整体代码:
class Solution {
public:
string reverseLeftWords(string s, int n) {
//1、整体反转
reverse(s.begin(), s.end());
//2、反转前size-n个
reverse(s.begin(), s.begin() + s.size() - n);
//3、反转后n个字符
reverse(s.begin() + s.size() - n, s.end());
return s;
}
};