int转string:string s = to_string(n);
string转int: int n = stoi(s);
erase函数:
- erase(pos, n) 删除从pos开始的n个字符,erase(0, 1)就是删除第一个字符
- erase(position) 删除position处的一个字符,position为迭代器
- erase(first, last) 删除从first到last之间的字符,first last为迭代器
双指针
//时间复杂度 O(n)
class Solution {
public:
string replaceSpace(string s) {
int cnt = 0;
int sOldSize = s.size();
for(int i = 0; i < s.size(); i++){
if(s[i] == ' ')
cnt++;
}
s.resize(sOldSize + cnt * 2);
int sNewSize = s.size();
int i = sOldSize - 1, j = sNewSize - 1;
while(i >= 0 && j >= 0){
if(s[i] != ' '){
s[j] = s[i];
i--;
j--;
}
else{
s[j] = '0';
s[j-1] = '2';
s[j-2] = '%';
j = j - 3;
i--;
}
}
return s;
}
};
其实很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。(从前往后则需O(n^2))
快慢指针
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
if(nums.size() == 0)
return 0;
int i = 0, j = 0;
int tmp;
while(j < nums.size()){
if(nums[j] != val){
nums[i] = nums[j];
i++;
}
j++;
}
return i;
}
};
数学取余
class Solution {
public:
string reverseLeftWords(string s, int n) {
string res;
for(int i = n; i < n + s.size(); i++){
res += s[i % s.size()];
}
return res;
}
};