一、反转字符串
我用了双指针,首尾两个元素交换,题解用了swap()更简介。
class Solution {
public:
void reverseString(vector<char>& s) {
int left=0;
int right=s.size()-1;
while(left<=right){
char temp=s[left];
s[left]=s[right];
s[right]=temp;
left++;
right--;
}
}
};
题解:
void reverseString(vector<char>& s) {
for (int i = 0, j = s.size() - 1; i < s.size()/2; i++, j--) {
swap(s[i],s[j]);
}
}
二、反转字符串Ⅱ
本题的思路是通过操作for循环的条件,一段一段检索字符串。每次以2k为单位长度来进行相应操作。
需要注意的是迭代器的使用,如果想用一个数组的头迭代器和尾迭代器还好说,直接用.begin()和.end()就行,如果想用中间某个元素的迭代器的话,就让.begin()+i。
class Solution {
public:
string reverseStr(string s, int k) {
for(int i=0;i<s.size();i+=(2*k)){
if(i+k<=s.size()-1){
reverse(s.begin()+i,s.begin()+i+k);
}
else{
reverse(s.begin()+i,s.end());
}
}
return s;
}
};
三、替换字符串
本题需要的知识点是,对现有字符数组进行扩充,用到了resize()函数,内部要求写原数组的大小加上要增加的大小。
没有很好的办法直接插入number单词,只能一个个往数组里添加
#include<iostream>
using namespace std;
int main(){
string s;
cin>>s;
int left=s.size()-1;
int cnt=0;
for(int i=0;i<s.size();i++){
if(s[i]>='0'&&s[i]<='9')cnt++;
}
s.resize(s.size()+cnt*5);
int right=s.size()-1;
while(left>=0){
if(s[left]>='0'&&s[left]<='9'){
s[right--]='r';
s[right--]='e';
s[right--]='b';
s[right--]='m';
s[right--]='u';
s[right--]='n';
}
else{
s[right--]=s[left];
}
left--;
}
cout<<s<<endl;
}