344.反转字符串
很简单,没什么可说的。
class Solution {
public:
void reverseString(vector<char>& s) {
int left = 0,right = s.size() - 1;
while(left < right)
swap(s[left++], s[right--]);
}
};
541. 反转字符串II
class Solution {
public:
string reverseStr(string s, int k) {
int pos = 0;
while (pos < s.size()) {
if (pos + k <= s.size())
reverse(s.begin() + pos, s.begin() + pos + k);
else
reverse(s.begin() + pos, s.end());
pos += 2 * k;
}
return s;
}
};
54. 替换数字
如果不使用辅助空间,需要先将字符串扩容,然后从后向前插入新增内容。如果从前向后插入,每次插入元素都需要移动元素后面所有内容,时间复杂度为 O ( n 2 ) O(n^2) O(n2).
#include <iostream>
#include <string>
using namespace std;
int main () {
string s;
cin >> s;
int num = 0;
for (char c : s)
if (c >= '0' && c <= '9')
num++;
int oldIndex = s.size() - 1;
s.resize(s.size() + 5 * num);
int newIndex = s.size() - 1;
while (oldIndex >= 0) {
if (s[oldIndex] >= '0' && s[oldIndex] <= '9') {
s[newIndex--] = 'r';
s[newIndex--] = 'e';
s[newIndex--] = 'b';
s[newIndex--] = 'm';
s[newIndex--] = 'u';
s[newIndex--] = 'n';
}
else
s[newIndex--] = s[oldIndex];
oldIndex--;
}
cout << s << endl;
}