当前位置: 首页 > news >正文

代码随想录第55期训练营第八天|LeetCode344.反转字符串、541.反转字符串II、卡码网:54.替换数字

前言

这是我参加的第二次训练营!!!爽!这次我将更加细致的写清每一道难题,不仅是提升自己,也希望我自己的写的文章对读者有一定的帮助!

打卡代码随想录算法训练营第55期第八天(づ ̄3 ̄)づ╭❤~ 

首先十分推荐学算法的同学可以先了解一下代码随想录,可以在B站卡哥B站账号、代码随想录官方网站代码随想录了解,卡哥清晰易懂的算法教学让我直接果断关注,也十分有缘和第55期的训练营大家庭一起进步。


今日题目

LeetCode 344 反转字符串

题目链接:344 反转字符串

文章讲解:反转字符串

视频讲解:卡哥讲解 —— 反转字符串

这道题没有什么好说的,如果这都没有想到左右指针的话,应该是新手,多练,多刷,自然会有感觉。

public class Solution {
    public void ReverseString(char[] s) {
        //左右指针 中间值交换即可
        for(int i = 0,right = s.Length - 1; i < s.Length / 2; i++,right--)
        {
            char temp  = s[i];
            s[i] = s[right];
            s[right] = temp;
        }
    }
}

LeetCode 541 反转字符串II

题目链接:541 反转字符串II

文章讲解:反转字符串II

视频讲解:卡哥讲解 —— 反转字符串II

这道题其实有点迷惑人的意思了,其实就是一段字符串,从左往右遍历K个翻转,然后再遍历K个不动,再遍历K个翻转,直到最后剩下不到K个,全部翻转,所以在for循环中,翻转的只是K个,而不是2K个,注意审题。

public class Solution {
    public string ReverseStr(string s, int k) {
        if(s.Length == 1)
            return s;
        char[] array = s.ToArray<char>();
        for(int i = 0; i < s.Length; i += 2 * k/*每次移动2k个字符*/)
        {
            if(i + k <= s.Length)//看是否够翻转k个长度
                Reverse(array , i , i + k - 1);
            else//不够则把剩下的全部反转
                Reverse(array, i , array.Length - 1);
        }
        return new string(array);
    }
    //翻转函数
    public char[] Reverse(char[] array, int left, int right)
    {
        while(left < right)
        {
            char temp = array[left];
            array[left] = array[right];
            array[right] = temp;
            left++;
            right--;
        }
        return array;
    }
}

卡码网 54 替换数字

题目链接:54 替换数字

文章讲解:替换数字

本题确实好理解,但是引用了一个非常牛逼的思路就是后序,因为对于数组来说,如果从头遍历,每次往后扩充就会导致后面的值往后扩充,但是如果是后序的话,就巧妙的避开了这个问题。

#include <iostream>
using namespace std;
int main() {
    string s;
    while (cin >> s) {
        int sOldIndex = s.size() - 1;
        int count = 0; // 统计数字的个数
        for (int i = 0; i < s.size(); i++) {
            if (s[i] >= '0' && s[i] <= '9') {
                count++;
            }
        }
        // 扩充字符串s的大小,也就是将每个数字替换成"number"之后的大小
        s.resize(s.size() + count * 5);
        int sNewIndex = s.size() - 1;
        // 从后往前将数字替换为"number"
        while (sOldIndex >= 0) {
            if (s[sOldIndex] >= '0' && s[sOldIndex] <= '9') {
                s[sNewIndex--] = 'r';
                s[sNewIndex--] = 'e';
                s[sNewIndex--] = 'b';
                s[sNewIndex--] = 'm';
                s[sNewIndex--] = 'u';
                s[sNewIndex--] = 'n';
            } else {
                s[sNewIndex--] = s[sOldIndex];
            }
            sOldIndex--;
        }
        cout << s << endl;       
    }
}

相关文章:

  • 嵌入式硬件工程师从小白到入门-原理图(三)
  • lecode2680. 最大或值-medium
  • <el-autocompoete>下拉列表,点击选择之后的操作事件
  • 【人工智能】LM Studio 的 GPU 加速:释放大模型推理潜能的极致优化
  • 源码分析之Leaflet中dom模块DomEvent.DoubleTap的实现原理
  • STM32标准库之I2C示例代码
  • mac系统conda的python环境下安装uWSGI报缺少libpython3.9.a问题解决方法
  • Linux:gsd-account进程异常内存泄漏排查
  • 一个免费 好用的pdf在线处理工具
  • Jmeter旧版本如何下载
  • 接口自动化测试框架详解
  • 永磁同步电机模型第三篇之两相电机坐标变换
  • SolidWorks使用显卡教程
  • struts1+struts2项目兼容升级到了spring boot 2.7
  • Blender标注工具
  • 【Python】超详细实例讲解python多线程(threading模块)
  • SpringBoot入门-(1) Maven【概念+流程】
  • UNIX网络编程笔记:套接字
  • C#通过API接口返回流式响应内容---SignalR方式
  • 小科普《DNS服务器》
  • 马上评|“衣服越来越难买”,对市场是一个提醒
  • 国台办:80年前台湾重归中国版图,80年后不可能让台湾分裂出去
  • 美国明尼苏达州发生山火,过火面积超80平方公里
  • 三亚通报救护车省外拉警报器开道旅游:违规违法,责令公司停业整顿
  • 一海南救护车在西藏无任务拉警笛开道,墨脱警方:已处罚教育
  • 金价大跌!足金饰品每克一夜便宜14元,涨势是否已终结?