344.反转字符串
思路:用swap遍历一个循环就行了。
代码:
class Solution {
public:
void reverseString(vector<char>& s) {
for(int i=0;i<s.size()/2;++i){
swap(s[i],s[s.size()-i-1]);
}
}
};
541. 反转字符串II
思路:关键是for循环每次遍历2k个字符,然后在循环中调用库函数reverse。
代码:
class Solution {
public:
string reverseStr(string s, int k) {
for(int i=0;i<s.size();i+=2*k){
if(s.size()-i>=k)
reverse(s.begin()+i,s.begin()+i+k);
else
reverse(s.begin()+i,s.end());
}
return s;
}
};
卡码网:54.替换数字
思路:数组填充使用后序遍历,注意改变字符串长度。
代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
int sOldIndex=s.size()-1;
int count=0;
for(char i:s){
if(i>='0'&&i<='9')
count++;
}
s.resize(s.size()+count*5);
int sNewIndex=s.size()-1;
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;
return 0;
}