1.反转字符串
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]);
}
}
};
2.反转字符串II
直接用reverse(是左闭右开的)
std::reverse 是 C++ 标准库中的一个函数,定义在 头文件中,用于对任意范围进行翻转操作。
其函数原型如下:
template
void reverse(BidirectionalIterator first, BidirectionalIterator last);
std::reverse 函数接受两个迭代器参数,分别指定要翻转的范围的起始位置和终止位置(不包含该位置)。
它将按照反向顺序将范围内的元素重新排列。例如,如果范围是 [first, last),则对于 i 从 first 到 last-1 的每个位置,会将位置 i 的值和 last-1-i 的值互换。
下面是一个使用示例:
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> nums = {1, 2, 3, 4, 5};
// 翻转整个向量
std::reverse(nums.begin(), nums.end());
// 输出结果:5 4 3 2 1
for (auto num : nums) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
在上述示例中,我们使用 std::reverse 函数将整个向量 nums 中的元素翻转,输出结果为 5 4 3 2 1。
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: //这个写的reverse是左闭右闭的
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]);
}
}
string reverseStr(string s, int k) {
for (int i = 0; i < s.size(); i += (2 * k)) {
// 1. 每隔 2k 个字符的前 k 个字符进行反转
// 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
if (i + k <= s.size()) {
reverse(s, i, i+k-1);
} else {
// 3. 剩余字符少于 k 个,则将剩余字符全部反转。
reverse(s, i, s.size() - 1);
}
}
return s;
}
};
另一种解法:
class Solution {
public:
string reverseStr(string s, int k) {
int n = s.size(), pos = 0;
while(pos < n) {
if(pos + k < n) {
reverse(s.begin() + pos, s.begin() + pos +k);
} else {
reverse(s.begin() + pos, s.end());
}
return s;
}
}
};
3.替换空格
%20 是由三个字符组成的编码,每个字符占用一个字节。
空格占一个字符
resize
#include <iostream>
#include <string>
int main() {
std::string s = "Hello";
// 调整大小为 8,并在末尾添加空字符
s.resize(8);
std::cout << s << std::endl; // 输出:Hello\0\0\0
// 调整大小为 5,并删除多余的字符
s.resize(5);
std::cout << s << std::endl; // 输出:Hello
// 调整大小为 10,并在末尾添加字符 '!'
s.resize(10, '!');
std::cout << s << std::endl; // 输出:Hello!!!!!
return 0;
}