344. Reverse String344. 反转字符串344. Reverse String
class Solution {
public:
void reverseString(vector<char>& s) {
int l = 0, r = s.size() - 1;
while (l < r) {
s[l] ^= s[r];
s[r] ^= s[l];
s[l] ^= s[r];
l++, r--;
}
}
};
class Solution {
public:
string reverseStr(string s, int k) {
int n = s.size();
for (int i = 0; i < n; i += 2 * k) {
reverse(s.begin() + i, s.begin() + min(i + k, n));
}
return s;
}
};
C++的reverse库函数是左闭右开的
#include <bits/stdc++.h>
using namespace std;
int main() {
string s = "";
cin >> s;
string ss = "";
for (int i = 0; i < s.size(); i++) {
if (s[i] >= '1' && s[i] <= '9') ss += "number";
else ss += s[i];
}
cout << ss;
}
如果不开新数组,原地扩增数组用双指针的做法如下:
一个指针在原始数组末尾从后往前遍历,另一个在扩大的空间末尾移动
#include <bits/stdc++.h>
using namespace std;
int main() {
string s = "";
cin >> s;
int oldn = s.size() - 1, count = 0;
for (int i = 0; i <= oldn; i++) {
if (s[i] >= '1' && s[i] <= '9')
count++;
}
s.resize(oldn + 1 + count * 5);
int n = s.size() - 1;
for (int i = oldn; i >= 0; i--) {
if (s[i] >= '1' && s[i] <= '9') {
s[n--] = 'r';
s[n--] = 'e';
s[n--] = 'b';
s[n--] = 'm';
s[n--] = 'u';
s[n--] = 'n';
} else {
s[n] = s[i];
n = n - 1;
}
}
cout << s;
}