344.反转字符串
讲解:https://programmercarl.com/0344.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
class Solution {
public:
void reverseString(vector<char>& s) {
for (int i = 0, j = s.size() - 1; i < s.size() / 2; i++, j--) {
s[i] ^= s[j];
s[j] ^= s[i];
s[i] ^= s[j];
}
}
};
注意if里判定范围为向下取整,若向上取整则需要加1。
541. 反转字符串II
讲解:https://programmercarl.com/0541.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2II.html
class Solution {
public:
string reverseStr(string s, int k) {
for (int i = 0; i < s.size(); i += (2 * k)) {
if (i + k <= s.size()) {
reverse(s.begin() + i, s.begin() + i + k);
} else reverse(s.begin() + i, s.end());
}
return s;
}
};
学习reverse的应用
替换数字
讲解:https://programmercarl.com/kama54.%E6%9B%BF%E6%8D%A2%E6%95%B0%E5%AD%97.html
#include<iostream>
#include<string>
int main() {
std::string s;
std::cin >> s;
int sOldlength = s.size();
int number = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] >= '0' && s[i] <= '9') number++;
}
s.resize(sOldlength + (number * 5));
int sNewlength = s.size();
for (int r = sNewlength - 1, l = sOldlength - 1; l >= 0; l--, r--) {
if (s[l] >= '0' && s[l] <= '9') {
s[r] = 'r';
s[r-1] = 'e';
s[r-2] = 'b';
s[r-3] = 'm';
s[r-4] = 'u';
s[r-5] = 'n';
r -= 5;
} else {
s[r] = s[l];
}
}
std::cout << s << std::endl;
}
注意判定0~9范围需要加上=,即>=0和<=9。
151.翻转字符串里的单词
https://programmercarl.com/0151.%E7%BF%BB%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E7%9A%84%E5%8D%95%E8%AF%8D.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
class Solution {
public:
void reverse(string &s, int start, int end){
for (int i = start, j = end; i < j; i++, j--) {
swap(s[i], s[j]);
}
}
void removeExtraSpace(string &s) {
int slow = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] != ' ') {
if (slow != 0) s[slow++] = ' ';
while (i < s.size() && s[i] != ' ') {
s[slow++] = s[i++];
}
}
}
s.resize(slow);
}
string reverseWords(string s) {
removeExtraSpace(s);
reverse(s, 0, s.size() - 1);
int start = 0;
for (int i = 0; i <= s.size(); i++) {
if (s[i] == ' ' || i == s.size()) {
reverse(s, start, i - 1);
start = i + 1;
}
}
return s;
}
};
右旋字符串
https://programmercarl.com/kama55.%E5%8F%B3%E6%97%8B%E5%AD%97%E7%AC%A6%E4%B8%B2.html#%E6%80%9D%E8%B7%AF
#include<iostream>
#include<string>
#include<algorithm>
int main() {
std::string s;
int k;
std::cin >> k;
std::cin >> s;
reverse(s.begin(), s.end());
reverse(s.begin(), s.begin() + k);
reverse(s.begin() + k, s.end());
std::cout << s <<std::endl;
}