344. 反转字符串
双指针反转
class Solution {
public:
void reverseString(vector<char>& s) {
int left=0;
int right=s.size()-1;
while(left<right){
char tmp=s[left];
s[left]=s[right];
s[right]=tmp;
left++;
right--;
}
for(char a:s){
cout<<a;
}
}
};
541. 反转字符串 II
代码随想录链接:代码随想录 (programmercarl.com)
本来是想参考链表相交那样弄一个快指针先跑k步,但是没写出来。
看题解可以直接移动2k,因为每次操作的对象都是2k个。
class Solution {
public:
string reverseStr(string s, int k) {
for(int i=0;i<s.length();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;
}
};
替换数字
直接cout
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
cin>>s;
for(int i=0;i<s.length();i++){
if(s[i]>='0' && s[i]<='9'){
cout<<"number";
}else{
cout<<s[i];
}
}
}
双指针的方法(一开始把变量名字写成new了,debug de了半天)
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
cin>>s;
int old=s.size()-1;
int countnum=0;
for(int i=0;i<s.size();i++){
if(s[i]>='0'&& s[i]<='9'){
countnum++;
}
}
s.resize(s.size()+countnum*5);
int newi=s.size()-1;
while(old>=0){
if(s[old]>='0'&& s[old]<='9'){
s[newi--] = 'r';
s[newi--] = 'e';
s[newi--] = 'b';
s[newi--] = 'm';
s[newi--] = 'u';
s[newi--] = 'n';
}
else{
s[newi--]=s[old];
}
old--;
}
cout<<s;
}
总结
字符串第一天,比较好理解。第三题的优化方法要掌握一下。