344.反转字符串
这题比较容易,可以使用swap,或者定义一个中间变量进行交换操作。
class Solution {
public:
void reverseString(vector<char>& s) {
for(int i=0, j=s.size()-1;i<s.size()/2 ;i++,j--){
swap(s[i],s[j]);
}
}
};
541. 反转字符串II
由于有两个位置会用到字符串反转,因此定义一个函数用于字符串反转。i+k<=s.size()这个条件说明了剩余元素个数大于k。如果i+k>s.size()则说明剩下的元素个数小于k。
class Solution {
public:
void reverse(string &s,int left,int right){
for(int i=left,j=right;i<j;i++,j--){
swap(s[i],s[j]);
}
}
string reverseStr(string s, int k) {
for(int i=0;i<s.size();i+=2*k){
if(i+k<=s.size()){
reverse(s,i,i+k-1);
continue;//直接进入下次循环
}
reverse(s,i,s.size()-1);//如果剩余字符少于 k 个,则将剩余字符全部反转
}
return s;
}
};
54.替换数字(卡码网)
这道题没有选择对原字符串进行扩充,而是重新创建一个字符串进行赋值。
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
string res;
for(int i = 0; i < s.size(); i++) {
if(s[i] >= '0' && s[i] <= '9') {
res += "number";
} else {
res += s[i];
}
}
cout << res << endl;
return 0;
}