letcode 分类练习 字符串 344.反转字符串 541. 反转字符串II 卡码网:54.替换数字
反转字符串
掌握双指针法和swap函数的用法
class Solution {
public:
void reverseString(vector<char>& s) {
int left = 0; int right = s.size()-1;
while(left < right){
swap(s[left], s[right]);
left ++;
right--;
}
}
};
反转字符串II
掌握reverse的用法,注意这个是左闭右开,常见用法
reverse(s.begin(), s.end())
class Solution {
public:
string reverseStr(string s, int k) {
int n = s.size() - 1;
for(int i = 0;i<=n;i++){
if((i+1)%(2 * k) == 0){
reverse(s.begin() + i - 2 * k + 1,s.begin() + i - k + 1);
}
}
int last = (n+1) % (2 * k);
int tmp = n + 1 - last;
if(last >= k){
reverse(s.begin() + tmp, s.begin() + tmp + k);
}else if(last < k){
reverse(s.begin() + tmp, s.end());
}
return s;
}
};
卡码网:54.替换数字
#include<iostream>
#include<string>
using namespace std;
int main(){
string s;
cin>>s;
int fast = 0;
int count = 0;
int n = s.size();
for(fast = 0;fast<s.size();fast++){
if(s[fast]>='0' && s[fast] <= '9'){
count += 1;
}
}
s.resize(s.size() + 5 * count);
int j = s.size() - 1;
for(int i = n - 1;i>=0;i--){
if(s[i]>='0' && s[i] <= '9'){
s[j] = 'r'; j--;
s[j] = 'e'; j--;
s[j] = 'b'; j--;
s[j] = 'm'; j--;
s[j] = 'u'; j--;
s[j] = 'n'; j--;
}else{
s[j] = s[i]; j--;
}
}
cout<<s;
}
补充一下char数组和字符串的转换
// 将vector<char>转换为字符串
std::vector<char> charVec = {'H', 'e', 'l', 'l', 'o', ',' ,'w', 'o', 'r', 'l', 'd'};
std::string str(charVec.begin(), charVec.end());
// 将字符串转换为vector<char>
std::vector<char> charVecFromStr(str.begin(), str.end());