本文最后更新于 238 天前,其中的信息可能已经有所发展或是发生改变。
344.反转字符串
class Solution {
public:
void reverseString(vector<char> &s) {
for (int i = 0, j = s.size() - 1; i < s.size() / 2; i++, j--) {
swap(s[i], s[j]);//swap库函数
}
}
};
541.反转字符串II
/**
* reverse 算法 反转指定范围的元素
* @param beg 容器开始迭代器
* @param end 容器结束迭代器
*/
reverse(iterator beg, iterator end);
注意一下reverse()
的使用方法,就拿i = 0,k来举例
reverse(s.begin() + i, s.begin() + i + k);
开始迭代器毫无争议的是index为0的位置,结束迭代器为0 + k的位置,实际上指向了第k+1个元素,刚开始我疑惑了一下,后来才想起来,结束迭代器是返回指向数组尾端占位符的迭代器,注意是没有元素的.
也就是说,是指向目标元素的下一个元素.
class Solution {
public:
string reverseStr(string s, int k) {
int size = s.size();
for (int i = 0; i < size; i += (2 * k)) {
if (i + k <= size) {
reverse(s.begin() + i, s.begin() + i + k);
} else {
reverse(s.begin() + i, s.end());
}
}
return s;
}
};
替换数字
#include <iostream>
using namespace std;
int main() {
string s;
while (cin >> s) {
int sOldIndex = s.size() - 1;
int count = 0; // 统计数字的个数
for (int i = 0; i < s.size(); i++) {
if (s[i] >= '0' && s[i] <= '9') {
count++;
}
}
// 扩充字符串s的大小,也就是将每个数字替换成"number"之后的大小
s.resize(s.size() + count * 5);
int sNewIndex = s.size() - 1;
// 从后往前将数字替换为"number"
while (sOldIndex >= 0) {
if (s[sOldIndex] >= '0' && s[sOldIndex] <= '9') {
s[sNewIndex--] = 'r';
s[sNewIndex--] = 'e';
s[sNewIndex--] = 'b';
s[sNewIndex--] = 'm';
s[sNewIndex--] = 'u';
s[sNewIndex--] = 'n';
} else {
s[sNewIndex--] = s[sOldIndex];
}
sOldIndex--;
}
cout << s << endl;
}
}