344.反转字符串
非常简单的双指针
class Solution {
public:
void reverseString(vector<char>& s) {
int n = s.size();
int left = 0, right = n - 1;
while(right > left){
swap(s[left], s[right]);
left++;
right--;
}
}
};
541. 反转字符串II
也是较为简单
class Solution {
// reverse(s.begin(), s.end()); // 反转字符串,注意右区间和end()类似, 官方函数。
public:
void reverse(string &s, int left, int right){
while(left < right){
swap(s[left], s[right]);
left++;
right--;
}
}
string reverseStr(string s, int k) {
int n = s.size();
for(int i = 0; i < n; i += 2 * k){
if(i + k > n){
reverse(s, i, n - 1);
continue;
}
reverse(s, i, i + k - 1);
}
return s;
}
};
54.替换数字
54. 替换数字(第八期模拟笔试) (kamacoder.com)
双指针,从最后开始填充可以节省很多时间
#include <iostream>
using namespace std;
int main() {
string s;
while (cin >> s) {
// 先算出新字符串的长度
int number = 0, n = s.size();
for(char ca : s){
if(ca <= '9' && ca >= '0'){
number++;
}
}
s.resize(n + number * 5);
// 从最后开始来填充字符串
int lastIndex = n + number * 5 - 1;
for(int i = n - 1; i >= 0; i--){
if(s[i] >= '0' && s[i] <= '9'){
s[lastIndex--] = 'r';
s[lastIndex--] = 'e';
s[lastIndex--] = 'b';
s[lastIndex--] = 'm';
s[lastIndex--] = 'u';
s[lastIndex--] = 'n';
}else{
s[lastIndex--] = s[i];
}
}
cout << s << endl;
}
}