344.反转字符串
很简单,可以用库函数直接reverse,也可以用swap交换值。
class Solution {
public:
void reverseString(vector<char>& s) {
int right=s.size()-1;
for(int i=0;i<right;i++){
swap(s[i],s[right--]);
}
}
};
541.反转字符串2
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
稍微有点难度,但是想明白就好了,这道题目要求我们每记数到2k就反转前k个字符,所以我在下面的代码中,for循环里我采用i+=2*k,在循环里,反转字符串,需要注意的是反转字符串的尾部需要判断一下字符串长度,有两种可能,如果是i+k<count 这种是小于K个,则将剩余字符全部反转,也有可能是i+k>count 代表剩余字符小于 2k 但大于或等于 k 个,反转前 k 个字符。总而言之,min的作用就在于防止越界,
class Solution {
public:
string reverseStr(string s, int k) {
int count=s.size();
for(int i=0;i<count;i+=2*k){
reverse(s.begin()+i,s.begin()+min(i+k,count));
}
return s;
}
};
54.替换数字
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。
思路:如果知道CPP中的判断一个字符是不是数字字符的函数---isdigit 的话,这道题就很简单了
#include<iostream>
using namespace std;
void changeNumber(string& s){
string b;
for(int i=0;i<s.size();i++){
if(isdigit(s[i])){
b+="number";
}else{
b+=s[i];
}
}
cout<<b<<endl;
}
int main(){
string s;
cin>>s;
changeNumber(s);
}