【代码随想录训练营第42期 Day8打卡 LeetCode 344.反转字符串 541. 反转字符串II 卡码网:54.替换数字

目录

一、做题心得

二、题目及题解

[题目一:LeetCode 344.反转字符串](#题目一:LeetCode 344.反转字符串)

题目链接

题解

思路一:reverse()函数

​编辑思路二:双指针

[题目二:LeetCode 541. 反转字符串II](#题目二:LeetCode 541. 反转字符串II)

题目链接

题解

题目三:卡码网:54.替换数字

题目链接

题解

三、小结


一、做题心得

今天是代码随想录训练营打卡的第8天,学习的是字符串部分。

相比于昨天的内容,题量和难度都有所下降,也算是找到了自信,哈哈。不过也有一点新东西,在卡码网: 54.替换数字里,新学到了一个replace()函数,对于解决字符串问题有着很大的遍历,等会谈到这道题的时候会详细说明。话不多说,直接开始分析今天的三道题。

二、题目及题解

题目一:LeetCode 344.反转字符串

题目链接

344. 反转字符串 - 力扣(LeetCode)

题解

这个题的话,算得上是力扣简单题中最简单的那种了。

思路一:reverse()函数

直接看结果:(一行代码解决)

思路二:双指针

这个题要求反转数组里存储的字符,采用双指针,一个从第一个字符开始,往后遍历;一个从最后一个字符开始,往前遍历。每次交换两者位置,交换完之后再分别移动。

由于是双指针比较简单的应用了(之前已经有打卡过相关的练习了),这里之间看代码:

cpp 复制代码
class Solution {
public:
    void reverseString(vector<char>& s) {       //void类型最后不用return
        int left = 0;
        int right = s.size() - 1;       
        while(left < right)
        {
            swap(s[left],s[right]);     //swap()函数交换两者(首尾对应的两元素)
            left++;
            right--;
        }
    }
};

题目二:LeetCode 541. 反转字符串II

题目链接

541. 反转字符串 II - 力扣(LeetCode)

题解

这个题的话,主要就是得先看懂题意。题目要求每2k反转前k个字符,不足2k个字符就不用进行后续操作,如果剩余字符少于 k 个,则将剩余字符全部反转。注意就是每2k个字符作为一索引循环,不足的话就停止循环。进行循环时,再判断剩余元素个数,以进行不同操作(if...else语句)。注意reverse是左闭右闭区间。

代码如下:

cpp 复制代码
class Solution {
public:
    string reverseStr(string s, int k) {
        int n = s.size();
        for(int i = 0;i < n;i += 2*k)   //题目要求每2k反转前k个,不足2k个数就不用进行以下操作(i += 2*k)
        {
            if(i + k <= n)
                reverse(s.begin() + i,s.begin() + i + k);     //剩余字符大于等于k个,反转前k个字符
            else
                reverse(s.begin() + i,s.end());     //剩余字符少于k个,全部反转
        }
        return s;
    }
};

题目三:卡码网:54.替换数字

题目链接

54. 替换数字(第八期模拟笔试) (kamacoder.com)

题解

这个题思路其实还是比较简单,就是将每一个出现的数字替换成number。(注意数字在字符串中以字符形式存在)这里我们就要思考了,我们替换的时候,不可能直接在存储一个字符的位置替换一个字符串"number",所以我们能想到的就是通过增大字符串size,替换数字的时候挨个往后移动字符,这里我们直接使用repalce()函数就可以解决这个复杂的问题。

replace()函数的一个作用(还有其他作用,不一一列举了):

对于字符串s与str

用str替换指定字符串s从起始位置pos开始长度为len的字符:s.replace( pos, len,"str");

注意:replace()函数自动在pos处往后增大size,若出现数字,相当于得往后移6位,由于本身任意时候都往后移一位(i++),这里只需要在替换数字时i = i + 5既可。

这里直看代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin >> s;
    for(int i = 0;i < s.size();i++)
    {
        if(s[i] >= '0' && s[i] <= '9'){
            s.replace(i,1,"number");    //replace()函数的使用
            i += 5;
        }
    }
    cout << s;
    return 0;
}

三、小结

今天的打卡到此也就结束了,明天继续加油。最后,我是算法小白,但也希望终有所获。

相关推荐
qq_433554544 分钟前
C++ 完全背包
开发语言·c++·算法
lingran__8 分钟前
算法沉淀第二天(Catching the Krug)
c++·算法
im_AMBER1 小时前
杂记 15
java·开发语言·算法
爱coding的橙子1 小时前
每日算法刷题Day70:10.13:leetcode 二叉树10道题,用时2h
算法·leetcode·深度优先
ghie90902 小时前
基于MATLAB的遗传算法优化支持向量机实现
算法·支持向量机·matlab
朝新_2 小时前
【优选算法】第一弹——双指针(上)
算法
艾莉丝努力练剑3 小时前
【C++STL :stack && queue (一) 】STL:stack与queue全解析|深入使用(附高频算法题详解)
linux·开发语言·数据结构·c++·算法
CoovallyAIHub3 小时前
ICLR 2026 惊现 SAM 3,匿名提交,实现“概念分割”,CV领域再迎颠覆性突破?
深度学习·算法·计算机视觉
IT古董3 小时前
【第五章:计算机视觉-计算机视觉在工业制造领域中的应用】1.工业缺陷分割-(2)BiseNet系列算法详解
算法·计算机视觉·制造
电鱼智能的电小鱼3 小时前
服装制造企业痛点解决方案:EFISH-SBC-RK3588 预测性维护方案
网络·人工智能·嵌入式硬件·算法·制造