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

代码随想录(day8)——字符串

Leetcode.344 反转字符串:

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

原理过于简单,没什么好说的,直接给出代码:

class Solution {
public:void reverseString(vector<char>& s) {int end = s.size()-1;int start = 0;while( start <= end){swap(s[start],s[end]);start++;end--;}}
};


Leetcode.541 反转字符串:

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

       对于本题,题干中的条件看起来十分复杂,其实可以归结于一种分支情况,即每次都读取给定字符串s中的前2k个字符,反转前k个。即:

       而下面的两行则只是针对字符串中的剩余字符。如果剩余字符的数量少于k则全部反转,否则反转前k个。

       由于对于字符串的反转,每次都是以2k来进行的,所以,在遍历整体的字符串时,每次都遍历2k个字符,再对这些字符进行操作。由于每当读取2k字符和剩余字符的数量n,k<n<2k时,都是反转k个字符,所以这两种情况可以归为一类。即:判断已被操作的区间+k是否满足<=s.size(),满足的话,则反转这段区间的前k字符,否则说明剩余字符的数量<k,因此,直接对剩余的字符全部进行反转即可。

class Solution {
public:string reverseStr(string s, int k) {for(int i = 0; i < s.size(); i+=2*k){if(i + k <= s.size()){reverse(s.begin()+i,s.begin()+i+k);}else{reverse(s.begin()+i,s.begin()+s.size());}} return s;   }
};

卡码网.54 替换数字:

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

对于本题,可以直接利用string中的运算符重载"+="以及开辟一个新的string类对象来完成,但是这种方法需要开辟新的空间,且过于简单,意义不大,因此对于这种方法本处只给出代码,重点在于下面的第二种方法:

#include<string>
#include<iostream>
using namespace std;int main()
{string s1,s2;cin >> s1;for(int i = 0; i < s1.size(); i++){if(s1[i] >= '0' && s1[i] <= '9'){s2+="number";}else{s2+=s1[i];}}cout << s2;return 0;
}

运行结果如下:

       对于第二种方法,可以首先遍历一遍给定的字符串,并且创建一个变量count用于统计给定字符串中出现数字的次数。在遍历完成后,直接利用resize函数对给定字符串进行扩容,扩容大小为s1.size()-count+count*6,即s.size()+5*count。此时的字符串的大小就等于将所有的数字都改为number后的字符串的大小。

     然后利用双指针对字符串进行遍历,一个指针fast指向现字符串的末尾,另一个指针slow指向原字符串最后一个字符所在的位置。例如对于字符串a1b2c3,由于字符串中存在三个数字,因此count==3,在扩容时,大小为3+5*3 = 18。双指针指向的位置如下图所示:

如果slow位置所对应的字符是数字,则从fast位置开始,依次向前填写number的每个字母,即:

在完成对于number的倒序填写后,令fast--,slow--,即:

再对slow位置的字符进行判断,由于不为数字,因此s[fast]=s[slow];fast位置进行赋值。即:

随后再fast--,slow--。依次循环即可。

对应代码如下:

#include<string>
#include<iostream>
using namespace std;int main()
{string s1;cin >> s1;int count = 0;for(int i = 0; i < s1.size(); i++){if(s1[i] >= '0' && s1[i] <= '9'){count++;}}int oldlen = s1.size()-1;int slow = oldlen;s1.resize(s1.size()+5*count);int fast = s1.size()-1;for(; fast >=0; fast--){if(s1[slow] >= 'a' && s1[slow] <= 'z'){s1[fast] = s1[slow];}else {s1[fast] = 'r';s1[fast-1] = 'e';s1[fast-2] = 'b';s1[fast-3] = 'm';s1[fast-4] = 'u';s1[fast-5] = 'n';fast-=5;}slow--;}cout <<s1;return 0;
}

Leetcode.151 反转字符串中的单词:

151. 反转字符串中的单词 - 力扣(LeetCode)

        对于本题,与文章C及C++每日练习(2)-CSDN博客中倒置字符串一题极为相似,但是对于本题,单词之间的空格并不是只有一个,而是若干个。因此,解决本题的方法可以分为两步:

1.将给定字符串中的多余的空格进行删除。

2.按照C及C++每日练习(2)-CSDN博客中的方法倒置字符串中的单词

对于如何删除字符中多余的空格,例如对于下面给定的字符串:

对于多余的字符,分别为第一个字符前面的空格和最后一个字符后面的空格,以及两个单词之前非第一个空格。对于消除多余的字符,可使用的方法如下:

利用for循环对字符串进行遍历,同时创建两个指针slow,fast.在循环中,只对s[fast] !=" "的情况进行处理,如果s[fast] ==" \, \, ";则令fast继续向后遍历。例如对于上面图中的字符串,slow,fast的起始位置如下所示:

s[fast]!="\, \, \, ";时,即:

s[slow] = s[fast],并且两个指针向后移动一位,即:

按照上述方法,利用while循环完成对于单个字符或者字符串的覆盖,即:

  while(fast < s.size() && s[fast] != ' '){s[slow++] = s[fast++];}

而对于多余空格的处理,可以再循环开头单独进行判定:判定条件如下:
s[fast] !=' \, \, \, ' , slow !=0;,例如对于上面图中slow所处的位置是待处理的多余空格。由于处理多个空格的条件为s[fast] !=' \, \, \, ' , slow !=0;,因此按照前面对于fast运动逻辑的规定,fast会继续向下遍历,直到找到非空字符,即:

此时,改变slow位置的字符,即:s[slow] = '\, \, ';,然后让slow指向下一个位置,即:

随后,再利用前面的逻辑使得s[slow]=s[fast]来复写非空字符串,即:

再按照前面的规则,首先让fast移动至非空字符,即:

s[slow++]='\, \, ';,即:

再复写非空字符串,即:

完成了对于字符串的去重操作。随后,利用resize函数,将字符串的长度改为slow

对于旋转字符串的方法,可以在C及C++每日练习(2) 进行查看,本处只给出相应代码:
 

class Solution {
public:void removeExtraSpace(string&s){int slow = 0, fast = 0;for(fast= 0;fast < s.size(); fast++){if(s[fast] != ' '){if(slow != 0){s[slow] = ' ';slow++;}}while(fast < s.size() && s[fast] != ' '){s[slow++] = s[fast++];}}s.resize(slow);}string reverseWords(string s) {removeExtraSpace(s);reverse(s.begin(),s.end());   int slow = 0;for(int fast = 0; fast <= s.size(); fast++){if(fast == s.size() || s[fast] == ' '){reverse(s.begin()+slow,s.begin()+fast);slow = fast+1;}}return s;}
};

运行结果如下:

卡码网.55 右旋字符串:

55. 右旋字符串(第八期模拟笔试) (kamacoder.com)

没什么好说的,先整体逆置,在前k个逆置,最后剩余的逆置,代码如下:
 

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;int main()
{int k = 0;string s;cin>>k;cin>>s;reverse(s.begin(),s.end());reverse(s.begin(),s.begin()+k);reverse(s.begin()+k,s.end());cout << s;return 0;
}

运行结果如下:

相关文章:

代码随想录(day8)——字符串

Leetcode.344 反转字符串&#xff1a; 344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; 原理过于简单&#xff0c;没什么好说的&#xff0c;直接给出代码&#xff1a; class Solution { public:void reverseString(vector<char>& s) {int end s.size()-1…...

JavaScript 权威指南第七版(GPT 重译)(二)

第四章&#xff1a;表达式和运算符 本章记录了 JavaScript 表达式以及构建许多这些表达式的运算符。表达式 是 JavaScript 的短语&#xff0c;可以 评估 以产生一个值。在程序中直接嵌入的常量是一种非常简单的表达式。变量名也是一个简单表达式&#xff0c;它评估为分配给该变…...

【python_往企业微信群中发送文件】

python_往企业微信群中发送文件 这个是用企业微信群机器人的功能&#xff0c;没有用到后台应用。群机器人 #-*- coding:utf-8-* import requests#类型&#xff1a;voice,file file_type"file" file_path"D:\desktop\不过.jpg" webhookkey"xxxx"#…...

华为校招机试 - 循环依赖(20240320)

题目描述 给定一组元素,及其依赖关系,一个元素可以依赖于多个元素(不包括自己,被依赖元素不会重复),一个元素也可被多个元素依赖。 假定总是存在唯一的循环依赖,请输出该循环依赖。 输入描述 第一行是个正整数 N (1 < N < 100),表示依赖关系的个数。 下面每…...

基于Spring Boot技术的幼儿园管理系统

摘 要 随着信息时代的来临&#xff0c;过去的传统管理方式缺点逐渐暴露&#xff0c;对过去的传统管理方式的缺点进行分析&#xff0c;采取计算机方式构建幼儿园管理系统。本文通过课题背景、课题目的及意义相关技术&#xff0c;提出了一种活动信息、课程信息、菜谱信息、通知公…...

查找众数及中位数 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 众数是指一组数据中出现次数量多的那个数,众数可以是多个。 中位数只是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那…...

bash命令执行.sh文件 windows python环境

报错&#xff1a; bash : 无法将“bash”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 所在位置 行:1 字符: 1 ’ bash fetch_data.sh ‘ ~~~~ CategoryInfo : Object…...

refreactive vue3

ref 可以定义:基本类型、对象类型的响应式数据 reactive 只能定义:对象类型的响应式数据 <template><div class"person"><h2>Name: {{ name }}</h2><h2>Age: {{ age }}</h2><h2>Tel: {{ tel }}</h2><button cl…...

【项目实践Day06】异步请求与同步请求+Ajax+微信小程序上实现发送异步请求

什么是同步和异步 同步 在主线程上排队执行的任务&#xff0c;只有前一个任务执行完毕&#xff0c;才能继续执行下一个任务。也就是一旦调用开始&#xff0c;就必须等待其返回结果&#xff0c;程序的执行顺序和任务排列顺序一致。客户端必须等待服务器端的响应。在等待的期间客…...

Elasticsearch面试系列-01

1. 什么是 Elasticsearch? ES是一种开源、RESTful、可扩展的基于文档的搜索引擎,它构建在Lucene库上。 用户使用Kibana就可以可视化使用数据,同时Kibana也提供交互式的数据状态呈现和数据分析。 Apache Lucene搜索引擎基于JSON文档来进行搜索管理和快速搜索。 Elasticse…...

QT tableWidget横向纵向设置

横向控件 要设置QTabWidget选项卡的字体方向&#xff0c;可以使用QTabWidget的setTabPosition()方法。通过传递Qt枚举值QTabWidget.east或QTabWidget.west作为参数&#xff0c;可以设置选项卡的字体方向为从左到右或从右到左。 myTabWidget QTabWidget() myTabWidget.setTabP…...

Unity Mesh简化为Cube mesh

Mesh简化为Cube mesh &#x1f373;食用&#x1f959;子物体独立生成CubeMesh&#x1f96a;合并成一个CubeMesh&#x1f32d;Demo &#x1f373;食用 下载并导入插件&#x1f448;即可在代码中调用。 &#x1f959;子物体独立生成CubeMesh gameObject.ToCubeMesh_Invidual()…...

openGauss学习笔记-249 openGauss性能调优-使用Plan Hint进行调优-Join顺序的Hint

文章目录 openGauss学习笔记-249 openGauss性能调优-使用Plan Hint进行调优-Join顺序的Hint249.1 功能描述249.2 语法格式249.3 参数说明249.4 示例 openGauss学习笔记-249 openGauss性能调优-使用Plan Hint进行调优-Join顺序的Hint 249.1 功能描述 指明join的顺序&#xff0…...

大规模预训练语言模型的可解释性研究与实践

1. 背景介绍 随着深度学习技术的发展&#xff0c;大规模预训练语言模型&#xff08;Large-scale Pre-trained Language Models, LPLMs&#xff09;在自然语言处理领域取得了显著的成果。这些模型通常通过在大规模文本语料库上进行无监督预训练&#xff0c;然后微调到特定任务上…...

Rust常用库之序列化和反序列化库serde(使用 Serde 处理json)

文章目录 Rust常用库之序列化和反序列化库serde&#xff08;使用 Serde 处理json&#xff09;什么是serde库设计使用 Serde 处理jsonr# 的使用 参考 Rust常用库之序列化和反序列化库serde&#xff08;使用 Serde 处理json&#xff09; 什么是serde库 官网&#xff1a;https:/…...

java设计模式(2)---六大原则

设计模式之六大原则 这篇博客非常有意义&#xff0c;希望自己能够理解的基础上&#xff0c;在实际开发中融入这些思想&#xff0c;运用里面的精髓。 先列出六大原则&#xff1a;单一职责原则、里氏替换原则、接口隔离原则、依赖倒置原则、迪米特原则、开闭原则。 一、单一职…...

数学建模(层次分析法 python代码 案例)

目录 介绍: 模板: 例题:从景色、花费、饮食,男女比例四个方面去选取目的地 准则重要性矩阵: 每个准则的方案矩阵:​ 一致性检验: 特征值法求权值: 完整代码: 运行结果: 介绍:...

Gitlab介绍

1.什么是Gitlab GitLab是一个流行的版本控制系统平台&#xff0c;主要用于代码托管、测试和部署。 GitLab是基于Git的一个开源项目&#xff0c;它提供了一个用于仓库管理的Web服务。GitLab使用Ruby on Rails构建&#xff0c;并提供了诸如wiki和issue跟踪等功能。它允许用户通…...

Amuse .NET application for stable diffusion

Amuse github地址&#xff1a;https://github.com/tianleiwu/Amuse .NET application for stable diffusion, Leveraging OnnxStack, Amuse seamlessly integrates many StableDiffusion capabilities all within the .NET eco-system Welcome to Amuse! Amuse is a profes…...

【机器学习-05】模型的评估与选择

在前面【机器学习-01】机器学习基本概念与建模流程的文章中我们已经知道了机器学习的一些基本概念和模型构建的流程&#xff0c;本章我们将介绍模型训练出来后如何对模型进行评估和选择等 1、 误差与过拟合 学习器对样本的实际预测结果与真实值之间的差异&#xff0c;我们称之…...

如何用DoubleQoLMod在30分钟内让你的工业帝国效率翻倍?

如何用DoubleQoLMod在30分钟内让你的工业帝国效率翻倍&#xff1f; 【免费下载链接】DoubleQoLMod-zh 项目地址: https://gitcode.com/gh_mirrors/do/DoubleQoLMod-zh 想象一下&#xff0c;你的工厂正在全速运转&#xff0c;但资源采集却像蜗牛一样缓慢&#xff1b;你的…...

【仅限首批200位工程师开放】工业PHP网关配置诊断工具包(含自动巡检脚本+配置熵值评分模型+整改优先级热力图)

第一章&#xff1a;工业PHP网关配置的演进与工程挑战工业级PHP网关已从早期的简单NginxPHP-FPM反向代理&#xff0c;演进为集路由分发、协议转换、熔断限流、可观测性注入于一体的复合中间件层。这一演进在提升系统弹性的同时&#xff0c;也带来了配置复杂度指数级上升、多环境…...

0408晨间日记

- 关键词- - 上午- batam新的案子的评估- 资料全不全- 钢网层- 坐标档- bom的查询- 查询每个材料形状- 能不能生产- 细节 -材料特性- 制作炉温曲线- bom提取的方案- pdf转excel- 人工再核对一下- ai搜索再次纠错- 数字的1和字母的l是区分不出来的- cad坐标提取- 资料确实没有c…...

【大疆dji】ESDK开发环境搭建(网络配置篇)

1. 大疆ESDK开发环境网络配置概述 第一次接触大疆ESDK开发环境时&#xff0c;网络配置这个环节让我栽了不少跟头。记得去年给某物流园区部署无人机巡检系统时&#xff0c;光是让机场和边缘计算设备正常通信就折腾了整整两天。后来才发现&#xff0c;问题就出在一个小小的IP地址…...

若依(RuoYi)SpringBoot框架前后端数据安全传输实践:基于Base64的接口加解密方案

1. 为什么需要接口数据加密&#xff1f; 最近在做一个金融类项目时&#xff0c;客户明确要求所有接口传输数据必须加密。这让我意识到&#xff0c;很多开发者可能忽略了接口安全的重要性。想象一下&#xff0c;如果你的API数据在传输过程中被截获&#xff0c;用户密码、身份证号…...

精益目视设计全指南 | 2026工厂目视化从0到1全流程(第一弹)

2026 年&#xff0c;精益生产早已成为制造企业降本增效、规范管理的核心抓手&#xff0c;而精益目视设计&#xff08;精益目视化设计&#xff09;&#xff0c;正是精益生产、5S/6S 管理、TPM 设备管理落地的核心载体&#xff0c;被称为现场管理的 “无声管理者”。但绝大多数工…...

案例速递|手机摄像头模组底壳检测

东莞市沃德普自动化科技有限公司 www.wordop.com 检测背景&#xff1a; 在手机摄像头模组的精密制造流程中&#xff0c;模组底壳是镜头、CMOS传感器、VCM马达的核心承载与定位基准&#xff0c;其表面质量直接决定模组的装配精度、光学性能与长期使用可靠性。 检测需求&#x…...

Degrees of Lewdity游戏中文本地化完全指南:从认知到进阶的全流程解决方案

Degrees of Lewdity游戏中文本地化完全指南&#xff1a;从认知到进阶的全流程解决方案 【免费下载链接】Degrees-of-Lewdity-Chinese-Localization Degrees of Lewdity 游戏的授权中文社区本地化版本 项目地址: https://gitcode.com/gh_mirrors/de/Degrees-of-Lewdity-Chines…...

终极指南:使用smcFanControl彻底解决Intel Mac散热问题

终极指南&#xff1a;使用smcFanControl彻底解决Intel Mac散热问题 【免费下载链接】smcFanControl Control the fans of every Intel Mac to make it run cooler 项目地址: https://gitcode.com/gh_mirrors/smc/smcFanControl 在MacBook Pro运行大型编译任务或视频渲染…...

[具身智能-310]:大模型的神经网络的输入是词向量序列,还是Token序列?

这是一个非常精准的技术问题。要准确回答这个问题&#xff0c;我们需要区分“数据形式”和“计算实体”。简单来说&#xff1a;进入神经网络第一层进行数学计算的&#xff0c;绝对是“词向量序列”&#xff1b;但承载这些向量的“容器”和顺序&#xff0c;是由“Token序列”决定…...