代码随想录(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)

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

而下面的两行则只是针对字符串中的剩余字符。如果剩余字符的数量少于则全部反转,否则反转前
个。
由于对于字符串的反转,每次都是以来进行的,所以,在遍历整体的字符串时,每次都遍历
个字符,再对这些字符进行操作。由于每当读取
字符和剩余字符的数量
,
时,都是反转
个字符,所以这两种情况可以归为一类。即:判断已被操作的区间+
是否满足
,满足的话,则反转这段区间的前
字符,否则说明剩余字符的数量
,因此,直接对剩余的字符全部进行反转即可。
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)

对于本题,可以直接利用中的运算符重载
以及开辟一个新的
类对象来完成,但是这种方法需要开辟新的空间,且过于简单,意义不大,因此对于这种方法本处只给出代码,重点在于下面的第二种方法:
#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;
}
运行结果如下:

对于第二种方法,可以首先遍历一遍给定的字符串,并且创建一个变量用于统计给定字符串中出现数字的次数。在遍历完成后,直接利用
函数对给定字符串进行扩容,扩容大小为
,即
。此时的字符串的大小就等于将所有的数字都改为
后的字符串的大小。
然后利用双指针对字符串进行遍历,一个指针指向现字符串的末尾,另一个指针
指向原字符串最后一个字符所在的位置。例如对于字符串
,由于字符串中存在三个数字,因此
,在扩容时,大小为
。双指针指向的位置如下图所示:

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






在完成对于的倒序填写后,令
,即:

再对位置的字符进行判断,由于不为数字,因此
对
位置进行赋值。即:

随后再。依次循环即可。
对应代码如下:
#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博客中的方法倒置字符串中的单词
对于如何删除字符中多余的空格,例如对于下面给定的字符串:
对于多余的字符,分别为第一个字符前面的空格和最后一个字符后面的空格,以及两个单词之前非第一个空格。对于消除多余的字符,可使用的方法如下:
利用循环对字符串进行遍历,同时创建两个指针
.在循环中,只对
的情况进行处理,如果
则令
继续向后遍历。例如对于上面图中的字符串,
的起始位置如下所示:

当时,即:

令,并且两个指针向后移动一位,即:

按照上述方法,利用循环完成对于单个字符或者字符串的覆盖,即:
while(fast < s.size() && s[fast] != ' '){s[slow++] = s[fast++];}
而对于多余空格的处理,可以再循环开头单独进行判定:判定条件如下:,例如对于上面图中
所处的位置是待处理的多余空格。由于处理多个空格的条件为
,因此按照前面对于
运动逻辑的规定,
会继续向下遍历,直到找到非空字符,即:

此时,改变位置的字符,即:
,然后让
指向下一个位置,即:

随后,再利用前面的逻辑使得来复写非空字符串,即:

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

令,即:

再复写非空字符串,即:

完成了对于字符串的去重操作。随后,利用函数,将字符串的长度改为
。
对于旋转字符串的方法,可以在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)

没什么好说的,先整体逆置,在前个逆置,最后剩余的逆置,代码如下:
#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 反转字符串: 344. 反转字符串 - 力扣(LeetCode) 原理过于简单,没什么好说的,直接给出代码: class Solution { public:void reverseString(vector<char>& s) {int end s.size()-1…...
JavaScript 权威指南第七版(GPT 重译)(二)
第四章:表达式和运算符 本章记录了 JavaScript 表达式以及构建许多这些表达式的运算符。表达式 是 JavaScript 的短语,可以 评估 以产生一个值。在程序中直接嵌入的常量是一种非常简单的表达式。变量名也是一个简单表达式,它评估为分配给该变…...
【python_往企业微信群中发送文件】
python_往企业微信群中发送文件 这个是用企业微信群机器人的功能,没有用到后台应用。群机器人 #-*- coding:utf-8-* import requests#类型:voice,file file_type"file" file_path"D:\desktop\不过.jpg" webhookkey"xxxx"#…...
华为校招机试 - 循环依赖(20240320)
题目描述 给定一组元素,及其依赖关系,一个元素可以依赖于多个元素(不包括自己,被依赖元素不会重复),一个元素也可被多个元素依赖。 假定总是存在唯一的循环依赖,请输出该循环依赖。 输入描述 第一行是个正整数 N (1 < N < 100),表示依赖关系的个数。 下面每…...
基于Spring Boot技术的幼儿园管理系统
摘 要 随着信息时代的来临,过去的传统管理方式缺点逐渐暴露,对过去的传统管理方式的缺点进行分析,采取计算机方式构建幼儿园管理系统。本文通过课题背景、课题目的及意义相关技术,提出了一种活动信息、课程信息、菜谱信息、通知公…...
查找众数及中位数 - 华为OD统一考试(C卷)
OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 众数是指一组数据中出现次数量多的那个数,众数可以是多个。 中位数只是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那…...
bash命令执行.sh文件 windows python环境
报错: bash : 无法将“bash”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行: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+微信小程序上实现发送异步请求
什么是同步和异步 同步 在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务。也就是一旦调用开始,就必须等待其返回结果,程序的执行顺序和任务排列顺序一致。客户端必须等待服务器端的响应。在等待的期间客…...
Elasticsearch面试系列-01
1. 什么是 Elasticsearch? ES是一种开源、RESTful、可扩展的基于文档的搜索引擎,它构建在Lucene库上。 用户使用Kibana就可以可视化使用数据,同时Kibana也提供交互式的数据状态呈现和数据分析。 Apache Lucene搜索引擎基于JSON文档来进行搜索管理和快速搜索。 Elasticse…...
QT tableWidget横向纵向设置
横向控件 要设置QTabWidget选项卡的字体方向,可以使用QTabWidget的setTabPosition()方法。通过传递Qt枚举值QTabWidget.east或QTabWidget.west作为参数,可以设置选项卡的字体方向为从左到右或从右到左。 myTabWidget QTabWidget() myTabWidget.setTabP…...
Unity Mesh简化为Cube mesh
Mesh简化为Cube mesh 🍳食用🥙子物体独立生成CubeMesh🥪合并成一个CubeMesh🌭Demo 🍳食用 下载并导入插件👈即可在代码中调用。 🥙子物体独立生成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的顺序࿰…...
大规模预训练语言模型的可解释性研究与实践
1. 背景介绍 随着深度学习技术的发展,大规模预训练语言模型(Large-scale Pre-trained Language Models, LPLMs)在自然语言处理领域取得了显著的成果。这些模型通常通过在大规模文本语料库上进行无监督预训练,然后微调到特定任务上…...
Rust常用库之序列化和反序列化库serde(使用 Serde 处理json)
文章目录 Rust常用库之序列化和反序列化库serde(使用 Serde 处理json)什么是serde库设计使用 Serde 处理jsonr# 的使用 参考 Rust常用库之序列化和反序列化库serde(使用 Serde 处理json) 什么是serde库 官网:https:/…...
java设计模式(2)---六大原则
设计模式之六大原则 这篇博客非常有意义,希望自己能够理解的基础上,在实际开发中融入这些思想,运用里面的精髓。 先列出六大原则:单一职责原则、里氏替换原则、接口隔离原则、依赖倒置原则、迪米特原则、开闭原则。 一、单一职…...
数学建模(层次分析法 python代码 案例)
目录 介绍: 模板: 例题:从景色、花费、饮食,男女比例四个方面去选取目的地 准则重要性矩阵: 每个准则的方案矩阵: 一致性检验: 特征值法求权值: 完整代码: 运行结果: 介绍:...
Gitlab介绍
1.什么是Gitlab GitLab是一个流行的版本控制系统平台,主要用于代码托管、测试和部署。 GitLab是基于Git的一个开源项目,它提供了一个用于仓库管理的Web服务。GitLab使用Ruby on Rails构建,并提供了诸如wiki和issue跟踪等功能。它允许用户通…...
Amuse .NET application for stable diffusion
Amuse github地址: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】机器学习基本概念与建模流程的文章中我们已经知道了机器学习的一些基本概念和模型构建的流程,本章我们将介绍模型训练出来后如何对模型进行评估和选择等 1、 误差与过拟合 学习器对样本的实际预测结果与真实值之间的差异,我们称之…...
AI Agent在智能风控中的实战:多智能体欺诈检测与预警
AI Agent在智能风控中的实战:多智能体欺诈检测与预警 你有没有过明明是正常交易却被银行冻结账户的糟糕体验?或是听说过某电商平台上线新活动首日就被黑产团伙薅走数千万补贴的新闻?随着黑产欺诈向团伙化、专业化、动态化演进,传统依赖规则引擎、单模型机器学习的风控体系已…...
别再死记硬背SMO公式了!用Python手写一个SVM分类器,带你一步步拆解SMO核心逻辑
用Python手写SVM分类器:代码驱动理解SMO算法核心在机器学习领域,支持向量机(SVM)以其优秀的分类性能和坚实的数学基础著称。然而,许多学习者在理解其核心算法——序列最小优化(SMO)时,往往被复杂的数学推导所困扰。本文将采用一种…...
HarmonyOS ArkTS DateUtil 日期增减与日历计算完整指南
文章目录 背景一、引言二、日期增减方法详解使用示例 三、日历计算方法详解四、Demo 演示:日期增减结果展示五、Demo 演示:月历视图完整实现六、日历视图关键点解析为什么要填充前置空格?getLastDayOfMonth 的实现技巧 七、小结 背景 近期发现…...
VMware ESXi 9.1.0.0集成NVME+网卡驱动版发布|新特性+驱动集成+部署升级+FAQ全指南
一、ESXi 9.1.0.0 正式版核心新特性 VMware ESXi 9.1.0.0(2026 年 5 月发布)是 vSphere 9.1 核心组件,聚焦硬件兼容扩展、性能跃升、安全加固、运维简化四大方向,重点强化 NVMe 存储与网卡生态适配,以下为关键更新&am…...
PCB虚焊/走线断裂/焊盘脱落工程师易漏判
PCB 故障中,30% 并非元件损坏,而是 PCB 本身的隐性故障—— 虚焊、走线断裂、焊盘脱落、过孔开路。这类故障外观隐蔽、时好时坏、排查难度大,很多工程师反复更换元件仍无法解决,最终误判为 “板报废”。一、PCB 隐性故障核心成因…...
双稳健机器学习:用正交性与交叉拟合解决因果推断中的ML偏差
1. 项目概述:当机器学习遇见因果推断的“干扰”难题在实证研究的日常工作中,我们常常面临一个核心矛盾:我们真正关心的,往往只是一个或几个关键参数——比如一项政策对就业率的平均影响(平均处理效应,ATE&a…...
别再手动编译了!Matlab一键调用CEC2017测试函数的完整配置指南(附30个函数调用示例)
别再手动编译了!Matlab一键调用CEC2017测试函数的完整配置指南(附30个函数调用示例) 算法研究者们常常需要借助标准测试函数来验证优化算法的性能,而CEC2017测试函数集因其复杂性和多维度的挑战性,成为评估算法鲁棒性的…...
PCL 基于强度的双边滤波【2026最新版】
目录 一、算法原理 1、计算步骤 2、算法源码 3、函数解析 4、参考文献 二、代码实现 三、结果展示 四、滤波后未发生变化的原因 五、解决办法 六、结果展示 七、相关链接 本文由CSDN点云侠原创,博客长期更新,本文最近一次更新时间为:2026年5月24日。 一、算法原理 1、计算…...
TVA注意力层INT8量化配置技巧
重磅预告:本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...
真可用!美团数字人模型开源,MV、电商等统统拿下
美团开源的数字人视频生成框架 LongCat-Video-Avatar 刚刚更新到 1.5 版本。是真能用。这版更新把音频编码器换了,推理步数砍到8步,在770人、13240条主观评分的大规模评测里,雷达图面积全面领先。音频编码器换血,8步出图LongCat-V…...
