class Solution {
public:
void reverseString(vector<char>& s) {
int i,j;
for(i=0,j=s.size()-1;i<s.size()/2;i++,j--){
swap(s[i],s[j]);
}
}
};
reverse的使用;
遍历的跳步是2k为单位;
对题目的理解:
每2k个,前k个颠倒;一直到最后,少于2k,有两种情况,一种k~2k,则前k个颠倒,后面不变,另一种0~k个,则全部颠倒。
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);
continue;
}
reverse(s.begin()+i,s.end());
}
return s;
}
};
思路:
统计共有多少数字,确定变换后的s长度;
将数字改为“number”要从后往前增加(从前往后,则每添加新的元素,就要将后面所有元素往后移,时间开销大)
#include<iostream>
using namespace std;
int main(){
string s;
while(cin>>s){
int sold=s.size()-1;
int count=0;
for(int i=0;i<=sold;i++){
if(s[i]>='0' && s[i]<='9')
count++;
}
s.resize(s.size()+count*5);
int snew=s.size()-1;
while(sold>=0){
if(s[sold]>='0' && s[sold]<='9'){
s[snew--]='r';
s[snew--]='e';
s[snew--]='b';
s[snew--]='m';
s[snew--]='u';
s[snew--]='n';
}else{
s[snew--]=s[sold];
}
sold--;
}
cout<<s<<endl;
}
}