letcode 分类练习 字符串 344.反转字符串 541. 反转字符串II 卡码网:54.替换数字

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());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值