题目344. 反转字符串 - 力扣(LeetCode)
void reverseString(vector<char>& s) {
int len = s.size();
int left = 0;
int right = len - 1;
while (left <= right)
{
swap(s[left++], s[right--]);
}
return;
}
题目541. 反转字符串 II - 力扣(LeetCode)
class Solution {
public:
void reversek(string& s, int left, int right) {
reverse(s.begin() + left, s.begin() + right);
}
string reverseStr(string s, int k) {
//反转前k的函数
int i = 0;
int len = s.size();
for (auto& e : s)
{
i++;
if (i == len )
{
if (i % (2 * k) >= k )
{
reversek(s, len - i % (2 * k), len - i % (2 * k) + k);
}
else if (i % (2 * k) == 0)
{
reversek(s, 0, len - k);
}
else
{
reversek(s, len - i % (2 * k), len);
}
}
else if (i %( 2 * k) == 0)
{
reversek(s, i - 2*k, i - k );
}
}
return s;
}
};
题目54. 替换数字(第八期模拟笔试) (kamacoder.com)
#include<iostream>
using namespace std;
int main()
{
string s;
cin>>s;
//计算s中的数字数目
int n=0;
for(auto&e:s)
{
if(e>='0'&&e<='9')
{
n++;
}
}
//给s扩容
int len=s.size();
s.resize(s.size()+5*n);
//双指针替换
int pl=len-1;
int pr=s.size()-1;
while(pl<=pr&&pl>=0)
{
if (s[pl] <= '9' &&s[ pl] >= '0')
{
s[pr--] = 'r';
s[pr--] = 'e';
s[pr--] = 'b';
s[pr--] = 'm';
s[pr--] = 'u';
s[pr--] = 'n';
pl--;
}
else
{
s[pr--] = s[pl--];
}
}
cout<<s;
return 0;
}
最后
注意resize reserve reverse
resize()
用于改变容器的大小,新添加的元素会被默认初始化,reverse()
用于反转容器中元素的顺序,而reserve()
用于预先分配容器的存储空间,提高插入大量元素的效率。