代码算法训练营day8 | 344.反转字符串、 541. 反转字符串II、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串

news2024/11/24 3:18:06

day8:

  • 344.反转字符串
  • 541. 反转字符串II
  • 卡码网:54.替换数字
  • 151.翻转字符串里的单词
  • 卡码网:55.右旋转字符串

344.反转字符串

题目链接
状态:ok
文档:programmercarl.com

思路:
对于这道题目可以选择直接用C++里的一个库函数 reverse,调一下直接完事了。
如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。
如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。

对于字符串,我们定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。

代码:

class Solution {
public:
    void reverseString(vector<char>& s) {
        for(int i = 0,j = s.size()-1;i<s.size()/2;i++,j--)
        {
            //swap()是库函数,可以直接运用swap(s[i],s[j]);
            int temp = s[i];
            s[i] = s[j];
            s[j] = temp;
        }
    }
};

541. 反转字符串II

题目链接
状态:if条件没搞清楚
文档:programmercarl.com

思路:
思路图解

代码:

class Solution {
public:
    string reverseStr(string s, int k) {
        //关键点:每2k段就反转一下前k个
        for(int i = 0;i<s.size();i+=(2*k))
        {
            //每2k段就反转一下前k个
            //如果剩下的够k个就翻转前k个
            if(i+k <= s.size())
            {
                //翻转前k个,库函数前闭后开
                reverse(s.begin()+i,s.begin()+i+k);
            }
            //否则就全部翻转(不够k个)
            else
            {
                reverse(s.begin()+i,s.end());
            }
        }
        return s;
    }
};

注意:
库函数可以直接使用,不用在前面指定对象。
库函数的区间是前闭后开。


卡码网:54.替换数字

题目链接
状态:
文档:programmercarl.com

注意:
这道题不可以单独赋值,因为替换之后,原string的长度会扩大。

思路:
按照上述所说,既然替换之后原来的字符串的长度一定会增大,那可以先计算出来替换后的string的长度是多少。

例如:
“a1b” ⇒ “anumberb”,原来字符串长度是3,替换后的长度是3-1+1×6=8。
可以总结出来替换后的长度公式为:s.size() + count * 5

这道替换题,还是使用了双指针的思路。
既然string的长度扩大了,那么后来多出来的地方都是空着的,不妨从后往前去赋值。j 指向新数组的最后一位,i 指向旧数组的最后一位。

当i 指向的值不是数字时,直接赋值给j。
当i 指向的值是数字时,把number一个个的赋给j,每赋一个字母,j- -。number全部赋值完毕,i再前移一位。

为了方便表示,用一个string常量表示“number”,用下标去表示string常量中的每一个字母。

过程图解
代码:

#include<iostream>
using namespace std;
#include<string>

int main()
{
    string s;
    cin>>s; //输入字符串s
    int old_Size = s.size(); //计算旧数组的长度
    int count = 0; //计算字符串中的数字个数
    
    for(int i = 0;i<old_Size;i++)
    {
        if(s[i] >= '0' && s[i] <= '9')
        {
            count++; 
        }
    }
    
    //扩充字符串s的大小,也就是每个空格替换成"number"之后的大小
    //s.resize(size + count * 5);
    s = s + string(count * 5,'0');
    int new_Size = s.size(); //计算新数组的长度
    //int i = old_Size - 1; //i指向旧数组的最后一个元素
    int j = new_Size - 1; //j指向新数组的最后一个元素
    string addS = "number";
    
    for(int i = old_Size - 1;i>=0 && count > 0;i--)
    {
        if(s[i] >= '0' && s[i] <= '9')
        {
            //开始替换数字为number
            //num的初始化要放在里面,不然num--进行到0的时候,num之后一直都是0,并不会再重新变为6
            int num = 6;
            while(num--)
            {
                s[j--] = addS[num]; //number从后往前去替换 先是r,再是e....
            }
            //替换完之后,一个数字已经被解决掉了
            count--;
        }
        else
        {
            //没有找到数字,那就直接放入新的数组中
            s[j--] = s[i];
        }
    }
    
    cout<<s;
    return 0;
}

注意:
判断是否是数字的时候,if(s[i] >'0' && s[i] <'9') ,这里面记得要带上单引号,因为是在string中进行比较的。

add常量的下标num,int num = 6;这个要放到for循环中,每次遍历的时候都要重新更新一下,不然一个while循环后,num就已经==0了。等到下一个while循环的时候,如果不提前更新num的话,num- -就会出现下标越界的错误。


151.翻转字符串里的单词

解析链接

卡码网:55.右旋转字符串

解析链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1522668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

<Linux> 线程的同步与互斥

目录 前言&#xff1a; 一、资源共享问题 &#xff08;一&#xff09;多线程并发访问 &#xff08;二&#xff09;临界资源与临界区 &#xff08;三&#xff09;“锁” 是什么 二、多线程抢票场景 &#xff08;一&#xff09;并发抢票 &#xff08;二&#xff09;并发访…

基于Matlab的车牌识别算法,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

Oracle 临时表空间管理(Temporary Tablespace)

Oracle临时表空间&#xff08;Temporary Tablespace&#xff09;主要用来存储数据库运行中产生的临时对象&#xff0c;例如SQL排序结果集&#xff0c;临时表等&#xff0c;这些对象的生存周期只有会话。本文总结了Oralce中涉及临时表空间的管理和优化操作。 目录 一、临时表空…

Stargo 管理部署 Starrocks 集群

配置主机间 ssh 互信 ssh-copy-id hadoop02 ssh-copy-id hadoop03配置系统参数 ############################ Swap检查 ############################ echo 0 | sudo tee /proc/sys/vm/swappiness########################### 内核参数检查 ########################## echo…

全国农产品价格分析预测可视化系统设计与实现

全国农产品价格分析预测可视化系统设计与实现 【摘要】在当今信息化社会&#xff0c;数据的可视化已成为决策和分析的重要工具。尤其是在农业领域&#xff0c;了解和预测农产品价格趋势对于农民、政府和相关企业都至关重要。为了满足这一需求&#xff0c;设计并实现了全国农产…

JS引用类型

在JavaScript中&#xff0c;除了基本类型&#xff08;如字符串、数字、布尔值、null和undefined&#xff09;之外&#xff0c;还有引用类型。引用类型包括对象、数组和函数。它们在内存中的存储方式与基本类型不同&#xff0c;因为它们在内存中存储的是对实际数据的引用&#x…

LeetCode 7 / 100

哈希表、双指针 哈希表两数之和字母异位词分组最长连续序列 双指针移动零盛最多水的容器三数之和接雨水 LeetCode 1.两数之和 LeetCode 49. 字母异位词分组 LeetCode 128. 最长连续序列 LeetCode [283. 移动零](https://leetcode.cn/problems/move-zeroes/?envTypestudy-plan-…

计算机网络-概述

文章目录 1.2 因特网概述1.2.1 网络、互连网&#xff08;互联网&#xff09;和因特网1.2.2 因特网发展的三个阶段1.2.4 因特网的组成 1.3 三种交换方式1.3.1 电路交换1.3.2 分组交换1.3.3 报文交换1.3.4 三种方式对比 1.4 计算机网络的定义1.5 计算机网络的性能指标1.5.1 速率1…

DDR协议基础进阶(三)——(基本功能、初始化、MR寄存器)

DDR协议基础进阶&#xff08;三&#xff09;——&#xff08;基本功能、初始化、MR寄存器&#xff09; 一、DDR基本功能 DDR基本功能主要包括&#xff1a; 8-bit prefetch预取——8-bit&#xff0c;是指8位数据&#xff0c;即8倍芯片位宽的数据。由于DDR内部数据传输是32bit…

Spring Web MVC入门(2)

学习Spring MVC Postman介绍 在软件工程中, 我们需要具有前后端分离的思想, 以降低耦合性. 但是在测试后端代码时,我们还得写前端代码测试,这是个令人头疼的问题. 那么我们如何测试自己的后端程序呢, 这就用到了一个工具: Postman. 界面介绍: 传参的介绍 1.普通传参, 也就…

Android Studio 打包 Maker MV apk 详细步骤

一.使用RPG Make MV 部署项目&#xff0c;获取项目文件夹 这步基本都不会有问题&#xff1a; 二.安装Android Studio 安装过程参考教材就行了&#xff1a; https://blog.csdn.net/m0_62491877/article/details/126832118 但是有的版本面板没有Android的选项&#xff08;勾…

SpringAI——Java生态接入LLM

最近&#xff0c;Spring官网发布了SpringAI&#xff0c;可点此查看https://spring.io/blog/2024/03/12/spring-ai-0-8-1-released&#xff0c;对于SpringAI的介绍&#xff0c;可看官方文档&#xff1a;https://spring.io/projects/spring-ai#overview。 本文将使用SpringAI配合…

QML 布局管理器之GridLayout

一.QML GridLayout介绍 在QML中&#xff0c;GridLayout是一种用于布局元素的容器。它允许您以网格形式组织和排列元素。要使用rowspan、columnspan、layoutFillWidth和rowSpacing属性&#xff0c;您可以将一个元素跨越多行和多列&#xff0c;并填充整个宽度&#xff0c;同时设置…

Python Web开发记录 Day12:Django part6 用户登录

名人说&#xff1a;东边日出西边雨&#xff0c;道是无晴却有晴。——刘禹锡《竹枝词》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、登录界面2、用户名密码校验3、cookie与session配置①cookie与session②配置…

unity学习(60)——选择角色界面--MapHandler2-MapHandler.cs

1.新建一个脚本&#xff0c;里面有static变量loadingPlayerList using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Assets.Scripts.Model {internal class LoadData{public static List<Pl…

Qt QTableWidget 实现行选中及行悬浮高亮

表格整行的 selected、hover 高亮需求很常见&#xff0c;但使用 Qt 提供的开箱即用的方法根本无法实现这个需求&#xff08;至少在当前的时间节点是不行的&#xff09;&#xff1b;想要实现这个效果必须要费一点点力气&#xff0c;我们尽量选择较为简单的方法。 话不多说&…

Ubuntu 20.04 系统如何优雅地安装NCL?

一、什么是NCL&#xff1f; NCAR Command Language&#xff08;NCL&#xff09;是由美国大气研究中心&#xff08;NCAR&#xff09;推出的一款用于科学数据计算和可视化的免费软件。 它有着非常强大的文件输入和输出功能&#xff0c;可读写netCDF-3、netCDF-4 classic、HDF4、b…

基于Struts开发物流配送(快递)管理系统

开发工具&#xff1a;EclipseJdkTomcatMySQL数据库

手机中的8款万能App推荐!

目录 1.全能AI工具箱——HuluAI 2.AI视频生成——巨日禄 3.全能办公套件——鲸鲮Office 4.视频音频转换器——VideotoMP3Converter 5.特效滤镜摄影——PicsArt 6.智能工具箱——SmartTools 7.手机视频编辑软件——KineMaster 8.安卓版万能文档阅读器——AllDocumentRea…

「SpringBrick快速入门指南」:一款基于Spring Boot的高级插件化开发框架

文章目录 关于 | About技术文档 | Document开源项目 | Project 案例 | Demo项目结构 | Structure主程序配置集成 | Settings引入框架依赖 | Framework在配置文件加入配置 | YamlSpringBoot启动类改引导类 | Change 插件配置集成 | Settings引入依赖 | XML定义插件引导类 | Clas…