代码随想录算法训练营day8 344.反转字符串| 541. 反转字符串II|卡码网:54.替换数字

344.反转字符串

题目链接:https://leetcode.cn/problems/reverse-string/description/

思路:使用库函数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

题目链接:https://leetcode.cn/problems/reverse-string-ii/submissions/545834274/

思路:使用C++中的库函数reverse来进行反转。每次间隔取2k个字符,只反转前k个字符,剩余字符小于2k但大于或等于k个,则翻转前k个字符,剩余字符少于k个,则将剩余字符全部反转。按照这个逻辑写代码。

class Solution {
public:
    string reverseStr(string s, int k) {
        for(int i=0; i < s.size(); i += (2*k)){
            //每隔2k个字符的前k个字符进行反转;剩余字符小于2k但大于或等于k个,则翻转前k个字符
            if(i + k <=s.size()){
                reverse(s.begin() + i,s.begin() + i + k);
            }else{
                //如果剩余字符少于k个,则将剩余字符全部反转。
                reverse(s.begin() + i,s.end());
            }
        }
        return s;
    }
};

卡码网:54.替换数字

题目链接:https://kamacoder.com/problempage.php?pid=1064

思路:用ACM模式写代码有些不习惯,还要多熟悉。对于数组填充类问题,预先给数组扩容带填充后的大小,然后从后向前进行操作。

#include<iostream>
using namespace std;

int main(){
    string s;
    while (cin >> s){
        int oldIndex = s.size() - 1;
        int count = 0;
        for(int i = 0; i < s.size(); i++){
            if(s[i] >= '0'&& s[i] <= '9'){
                count++;
            }
        }
        //扩充字符串s的大小。
        s.resize(s.size() + count*5);
        int newIndex = s.size() - 1;
        //从后往前将数字替换掉
        while(oldIndex >=0){
            if(s[oldIndex] >= '0' && s[oldIndex] <= '9'){
                s[newIndex--] = 'r';
                s[newIndex--] = 'e';
                s[newIndex--] = 'b';
                s[newIndex--] = 'm';
                s[newIndex--] = 'u';
                s[newIndex--] = 'n';
            }else{
                s[newIndex--] = s[oldIndex];
            }
            oldIndex--;
        }
        std::cout << s << std::endl;
    }
}

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值