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

c++:string相关的oj题(415. 字符串相加、125. 验证回文串、541. 反转字符串 II、557. 反转字符串中的单词 III)

文章目录

  • 1. 415. 字符串相加
    • 题目详情
    • 代码1
    • 思路1
    • 代码2
    • 思路2
  • 2. 125. 验证回文串
    • 题目详情
    • 代码1(按照要求修改后放到新string里)
    • 思路1
    • 代码2(利用双指针/索引)
    • 思路2
  • 3. 541. 反转字符串 II
    • 题目详情
    • 代码1
    • 思路1
  • 4. 557. 反转字符串中的单词 III
    • 题目详情
    • 代码1(利用find)
    • 思路1
    • 代码2(利用双指针)
    • 思路2

1. 415. 字符串相加

传送门

题目详情

在这里插入图片描述

代码1

class Solution {
public:string addStrings(string num1, string num2) {int index1=num1.size()-1,index2=num2.size()-1;//找到最后一位int next=0;//进位string retStr;while(index1>=0||index2>=0)//还有一个没完就要进来:有可能一直进位{int val1=0,val2=0; if(index1>=0){val1=num1[index1--]-'0';}if(index2>=0){val2=num2[index2--]-'0';}int ret=next+val1+val2;//两者相加后加上进位数next=ret/10;//需要进位就是1了,不需要就是0ret%=10;retStr.insert(0,1,'0'+ret);//头插到新string}//最后有可能有1+9的情况,现在只会有0if(next==1){retStr.insert(0,1,'1');}return retStr;}
};

思路1

  1. 首先,定义两个指针 index1 和 index2 分别指向两个输入字符串的最后一位,用来从后往前遍历字符串。
  2. 然后定义一个变量 next 用来表示进位,初始化为 0。
  3. 接下来使用一个循环来遍历两个字符串,直到 index1 和 index2 都小于 0。在循环中,每次取出 index1 和 index2 对应位置的数字,并将它们与进位相加,得到一个临时的结果 ret。
  4. 然后更新进位 next 为 ret/10,并将 ret%10 插入到需要返回的字符串 retStr 的开头。
  5. 循环结束后,还需要检查最后是否有进位,如果有,需要将进位插入到结果字符串的开头。

但此时还是有一个问题的,那就是效率低(因为头插时间复杂度O(N^2));

代码2

class Solution {
public:string addStrings(string num1, string num2) {int index1=num1.size()-1,index2=num2.size()-1;//找到最后一位int next=0;//进位string retStr;while(index1>=0||index2>=0)//还有一个没完就要进来:有可能一直进位{int val1=0,val2=0; if(index1>=0){val1=num1[index1--]-'0';}if(index2>=0){val2=num2[index2--]-'0';}int ret=next+val1+val2;//两者相加后加上进位数next=ret/10;//需要进位就是1了,不需要就是0ret%=10;//使用尾插效率更好,尾插有append,这里我们使用+=retStr+='0'+ret;}//最后有可能有1+9的情况,现在只会有0if(next==1){retStr+='1';}reverse(retStr.begin(),retStr.end());//尾插后,最后翻转一下return retStr;}
};

思路2

整体思路都是一样的,只不过有头插换成了尾插+翻转

2. 125. 验证回文串

传送门

题目详情

在这里插入图片描述

代码1(按照要求修改后放到新string里)

class Solution {
public:bool isPalindrome(string s) {string re;for(auto e:s)//按照要求修改好{if((e>='A'&&e<='Z')||(e>='a'&&e<='z')||(e>='0'&&e<='9')){if(e>='A'&&e<='Z'){re+=(e+32);}else{re+=e;}}}string modified(re);reverse(re.begin(),re.end());       //看看是否相同for(int i=0;i<modified.size();i++){if(re[i]!=modified[i]){return false;}}return true;}

思路1

  1. 遍历输入字符串 s 中的每个字符 e。
    如果字符 e 是字母或数字,则根据题目要求将大写字母转换为小写字母,并将其添加到新的字符串 re 中。

  2. 创建一个新的字符串 modified,它是字符串 re 的一个副本。

  3. 反转字符串 re。

  4. 比较反转后的字符串 re 和副本字符串 modified,如果它们不相等,则返回 false,表示不是回文字符串;如果它们相等,则返回 true,表示是回文字符串

代码2(利用双指针/索引)

bool isLetterOrNumber(char ch)
{return (ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')||(ch>='0'&&ch<='9');
}class Solution {
public:bool isPalindrome(string s) {for(auto& e:s)//大的变小的{if(e>='A'&&e<='Z'){e+=32;}}int begin=0;int end=s.size()-1;while(begin<end){while(begin<end&&!isLetterOrNumber(s[begin])){begin++;}while(begin<end&&!isLetterOrNumber(s[end])){--end;}if(s[begin]!=s[end]){return false;}else{++begin;--end;}}return true;}
};

思路2

  1. 创建一个辅助函数 isLetterOrNumber,用于判断一个字符是否是字母或数字。
  2. 遍历输入字符串 s 中的每个字符 e,将大写字母转换为小写字母。
  3. 初始化两个指针 begin 和 end,分别指向字符串的开头和结尾。
  4. 在一个 while 循环中,不断移动指针 begin 和 end,直到两个指针相遇。
    在移动指针的过程中,跳过非字母和数字的字符。
  5. 在二者都是数字或者字母后,比较指针指向的字符,如果不相等,则返回 false,表示不是回文字符串;如果相等,则继续移动指针。
  6. 如果循环结束后都没有返回 false,则说明是回文字符串,返回 true。

3. 541. 反转字符串 II

传送门

题目详情

在这里插入图片描述

代码1

class Solution {
public:string reverseStr(string s, int k) {int len=s.size();for(int i=0;i<len;i+=2*k){if(i+k<=len)//剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符//同时前面的2k区域不用管,直接满足,只有最后那个不够2k的区间才讨论{reverse(s.begin()+i,s.begin()+i+k);}else{reverse(s.begin()+i,s.begin()+len);}}return s;}
};

思路1

利用每次要跳2k来处理:就直接i+=2k,这样每次直接跳到下一个区间,前面够2k的不用管,直接满足i+k<=len,只有那最后一个不够2k的需要讨论(毕竟s.begin()+len是最后元素的下个位置)

4. 557. 反转字符串中的单词 III

传送门

题目详情

在这里插入图片描述

代码1(利用find)

class Solution {
public:string reverseWords(string s) {size_t pos=0;int i=0;while(i<s.size()){pos=s.find(' ',i);if(pos==string::npos)//只有一个单词了{reverse(s.begin()+i,s.end());break;}reverse(s.begin()+i,s.begin()+pos);i=(pos+1);}return s;}
};

思路1

总体思路是找到单词的左和右索引,在这个区间内进行翻转

  1. 利用一个i 对字符串进行遍历,pos来储存找到的' '的下标
  2. 那么从i到pos就是一个单词加上’ ',正好满足reserve()函数左闭右开的性质
  3. 然后i=pos+1(跳到空格后)
  4. 如果没找到空格,就说明只剩下一个,或者只有一个单词。 就直接iend()进行翻转了

代码2(利用双指针)

class Solution {
public:string reverseWords(string s) {int i=0;while(i<s.size())//直接进循环{int left=i;//存一下起始位置while(i<s.size()&&s[i]!=' ')//找空格{i++;}//现在要么找到了,要么到size处了int right=i-1;while(left<right)//开始换{swap(s[left],s[right]);left++;right--;}if(s[i]==' '){i++;}}return s;}
};

思路2

总体思路是一样的,不过自己找,没有利用find


今天就到这里啦!

相关文章:

c++:string相关的oj题(415. 字符串相加、125. 验证回文串、541. 反转字符串 II、557. 反转字符串中的单词 III)

文章目录 1. 415. 字符串相加题目详情代码1思路1代码2思路2 2. 125. 验证回文串题目详情代码1&#xff08;按照要求修改后放到新string里&#xff09;思路1代码2(利用双指针/索引)思路2 3. 541. 反转字符串 II题目详情代码1思路1 4. 557. 反转字符串中的单词 III题目详情代码1&…...

HuoCMS|免费开源可商用CMS建站系统HuoCMS 2.0下载(thinkphp内核)

HuoCMS是一套基于ThinkPhp6.0Vue 开发的一套HuoCMS建站系统。 HuoCMS是一套内容管理系统同时也是一套企业官网建设系统&#xff0c;能够帮过用户快速搭建自己的网站。可以满足企业站&#xff0c;外贸站&#xff0c;个人博客等一系列的建站需求。HuoCMS的优势: 可以使用统一后台…...

VsCode + CMake构建项目 C/C++连接Mysql数据库 | 数据库增删改查C++封装 | 信息管理系统通用代码 ---- 课程笔记

这个是B站Up主&#xff1a;程序员程子青的视频 C封装Mysql增删改查操作_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1m24y1a79o/?p6&spm_id_frompageDriver&vd_sourcea934d7fc6f47698a29dac90a922ba5a3安装mysql:mysql 下载和安装和修改MYSQL8.0 数据库存储…...

HackTheBox - Medium - Linux - Ransom

Ransom 外部信息搜集 端口扫描 循例nmap Web枚举 /api/login 它似乎受nosql注入影响&#xff0c;我们能够登录成功 把返回的cookie丢到cookie editor&#xff0c;回到主页 zip是加密的 Foothold 我们可以得知加密类型是ZipCrypto 谷歌能够找到这篇文章&#xff0c;它将告诉我…...

柠檬微趣面试准备

简单介绍一下spring原理 Spring框架是一个开源的Java应用程序框架&#xff0c;它提供了广泛的基础设施支持&#xff0c;帮助开发者构建Java应用程序。Spring的设计原则包括依赖注入&#xff08;DI&#xff09;和面向切面编程&#xff08;AOP&#xff09;等&#xff0c;以促使代…...

uniapp嵌套webview,无法返回上一级?

uniapp嵌套webview&#xff0c;如何解决回退问题&#xff1f; 文章目录 uniapp嵌套webview&#xff0c;如何解决回退问题&#xff1f;遇到问题解决方式方式一方式二 场景&#xff1a; 进入首页&#xff0c;自动跳转第三方应用 遇到问题 在设备上运行时&#xff0c;无法回退上…...

【优先级队列 之 堆的实现】

文章目录 前言优先级队列 PriorityQueue优先队列的模拟实现 堆堆的储存方式堆的创建建堆的时间复杂度堆的插入与删除 总结 前言 优先级队列 PriorityQueue 概念&#xff1a;对列是先进先出的的数据结构&#xff0c;但有些情况&#xff0c;数据可能带有优先级&#xff0c;一般出…...

Vue中$watch()方法和watch属性的区别

vue中$watch()和watch属性都是监听值的变化的&#xff0c;是同一个作用&#xff0c;但是有两个不同写法。 用法一&#xff1a; //注意&#xff1a;这种方法是监听不到对象的变化的。 this.$watch((newVal,oldVal)>{ }) 用法二&#xff1a; watch:{xxx:(newVal,oldVal)>…...

openssl3.2 - 官方demo学习 - test - certs - 001 - Primary root: root-cert

文章目录 openssl3.2 - 官方demo学习 - test - certs - 001 - Primary root: root-cert概述笔记备注END openssl3.2 - 官方demo学习 - test - certs - 001 - Primary root: root-cert 概述 实验前置条件为 openssl3.2 - linux脚本(.sh)调用openssl命令行参数的简单确认方法 …...

小程序商城能不能自己开发?

在数字化时代&#xff0c;小程序商城已经成为商家拓展销售渠道、提升品牌影响力的重要工具。那么&#xff0c;商家能否自己动手开发小程序商城呢&#xff1f;答案是肯定的。接下来&#xff0c;以乔拓云为例&#xff0c;为大家详细介绍如何自己搭建小程序商城。 首先&#xff0c…...

GPTBots:利用FlowBot中的卡片和表单信息,提供丰富的客服体验

在当今的数字化时代&#xff0c;客户服务的形式和体验正在经历着前所未有的变革。传统的文字消息方式已经无法满足现代用户对于服务体验的多元化需求。那么&#xff0c;如何才能在这个信息爆炸的时代&#xff0c;让我们的服务方式更加个性化、多样化&#xff0c;从而提供更丰富…...

ERC20 解读

1.ERC20 什么叫做代币&#xff1f; 代币可以在以太坊中表示任何东西&#xff1a; 在线平台中的信誉积分游戏中一个角色的技能彩票卷金融资产类似于公司股份的资产像美元一样的法定货币一盎司黄金及更多... 以太坊的这种强大特点必须以强有力的标准来处理&#xff0c;对吗&a…...

C#,入门教程(31)——预处理指令的基础知识与使用方法

上一篇&#xff1a; C#&#xff0c;入门教程(30)——扎好程序的笼子&#xff0c;错误处理 try catchhttps://blog.csdn.net/beijinghorn/article/details/124182386 Visual Studio、C#编译器以及C#语法所支持的预处理指令&#xff0c;绝对是天才设计。 编译程序的时候会发现&am…...

Java SE:面向对象(下)

1. static关键字 静态区的特点&#xff1a;静态区里面的每一样东西都是唯一有且仅有一个的&#xff0c;如此时str1 "abc"即此时静态区里面已经创建了字符串abc并将abc地址赋给str1&#xff0c;后面在进行赋值也不会在静态区开辟一串新的"abc" 1.1 static修…...

搭建开源数据库中间件MyCat2-配置mysql数据库双主双从

mycat2官网&#xff1a;MyCat2 前言&#xff1a;mycat2下载地址无法访问&#xff0c;不知道是不是被DNS污染了&#xff0c;还是需要搭梯子访问&#xff0c;所以我只能找到1.21的版本进行安装。搭建mycat2的前提是搭建数据库主从复制。 架构&#xff1a;双主双从 配置&#xf…...

Oracle 19c rac集群管理 -------- 集群启停操作过程

Oracle rac集群启停操作过程 首先查看数据库的集群的db_unique_name SQL> show parameter nameNAME TYPE VALUE ------------------------------------ ----------- --------------------------- cdb_cluster_name …...

【Java】HttpServlet类中前后端交互三种方式(query string、form表单、JSON字符串)

在前后端的交互中&#xff0c;前端通过以下三种方式来与后端进行交互&#x1f31f; ✅query string ✅form表单 ✅JSON字符串 下面我们将书写这三种方式的后端代码并进行讲解 1、Query String QueryString即在url中写入键值对&#xff0c;一般用doGet方法进行交互 代码如下 …...

【深蓝学院】移动机器人运动规划--第2章 基于搜索的路径规划--笔记

0. Outline 1. Graph Search Basis Configuration Space等概念 机器人配置: 指机器人位置和所有点的表示。 DOF: 指用于表示机器人配置所需的最小的实数坐标的数量n。 C-space: 包含机器人n维所有配置的空间。 在C-space中机器人的pose是一个点。 机器人在C-space中被表示为一…...

安装向量数据库milvus可视化工具attu

使用docker安装的命令和简单就一个命令&#xff1a; docker run -p 8000:3000 -e MILVUS_URL{milvus server IP}:19530 zilliz/attu:v2.3.5sunyuhuasunyuhua-HKF-WXX:~/dockercom/milvus$ docker run -p 8000:3000 -e MILVUS_URL127.0.0.1:19530 zilliz/attu:latest yarn run…...

STM32标准库开发——串口发送/单字节接收

USART基本结构 串口发送信息 启动串口一的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);初始化对应串口一的时钟&#xff0c;引脚&#xff0c;将TX引脚设置为复用推挽输出。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_In…...

Hive3.1.3安装避坑指南:从下载到配置的完整流程(含MySQL元数据迁移)

Hive3.1.3企业级部署实战&#xff1a;MySQL元数据管理与性能调优全解析 在大数据生态系统中&#xff0c;Hive始终扮演着数据仓库核心组件的角色。尽管实时计算框架日益流行&#xff0c;但据统计&#xff0c;超过78%的企业级数据仓库仍在使用Hive处理TB级以上的历史数据分析任务…...

从L298到自举H桥:深入聊聊直流电机驱动方案的演进与选型心得

从L298到自举H桥&#xff1a;直流电机驱动方案的技术演进与工程实践 在机器人底盘、自动化产线和智能硬件开发中&#xff0c;直流电机驱动电路的设计往往决定着整个系统的性能天花板。十年前我们可能还在用L298这类经典驱动芯片&#xff0c;如今工程师们的工具箱里已经出现了IR…...

【Polars 2.0数据清洗成本控制白皮书】:20年ETL专家亲授5大降本增效实战模式,92%企业忽略的内存泄漏陷阱

第一章&#xff1a;Polars 2.0数据清洗成本控制全景认知在现代数据工程实践中&#xff0c;数据清洗不再仅关乎逻辑正确性&#xff0c;更深度绑定计算资源消耗、内存占用与执行延迟。Polars 2.0 通过零拷贝语义、惰性执行引擎重构与 Arrow-native 内存布局优化&#xff0c;将清洗…...

终极指南:如何用 tf-quant-finance 实现 Hull-White 模型的百慕大式互换权定价

终极指南&#xff1a;如何用 tf-quant-finance 实现 Hull-White 模型的百慕大式互换权定价 【免费下载链接】tf-quant-finance High-performance TensorFlow library for quantitative finance. 项目地址: https://gitcode.com/gh_mirrors/tf/tf-quant-finance 在量化金…...

别再死磕ECharts了!试试这个Vue关系图谱插件relation-graph,上手快效果好

从ECharts到relation-graph&#xff1a;Vue关系图谱开发的效率革命 如果你正在使用Vue开发需要展示复杂关系网络的应用&#xff0c;可能已经尝试过ECharts的关系图功能。但当你需要更专业的交互体验、更直观的数据表达时&#xff0c;relation-graph这个专为Vue设计的关系图谱插…...

Gpmall分布式事务处理:订单创建与库存扣减的最终一致性保障

Gpmall分布式事务处理&#xff1a;订单创建与库存扣减的最终一致性保障 【免费下载链接】gpmall 项目地址: https://gitcode.com/gh_mirrors/gp/gpmall 在电商系统中&#xff0c;订单创建与库存扣减的分布式事务处理是确保数据一致性的核心挑战。Gpmall项目通过创新的P…...

数字化、智能化、移动化,人力资源系统革新的三大法宝!

人力资源系统革新&#xff0c;打造企业人才发展新引擎在当今竞争激烈的商业环境中&#xff0c;企业的人才发展成为了决定其成败的关键因素之一。然而&#xff0c;传统的人力资源管理系统往往存在着诸多问题&#xff0c;如流程繁琐、数据不精准、缺乏智能化等&#xff0c;这些问…...

Unity WebGL输入优化:跨平台文本输入解决方案的技术突破

Unity WebGL输入优化&#xff1a;跨平台文本输入解决方案的技术突破 【免费下载链接】WebGLInput IME for Unity WebGL 项目地址: https://gitcode.com/gh_mirrors/we/WebGLInput 在Unity WebGL应用的开发过程中&#xff0c;文本输入功能一直是开发者面临的核心挑战。传…...

嵌入式C++ RAII互斥锁封装器MutexLocker详解

1. MutexLocker&#xff1a;嵌入式C RAII风格互斥锁封装器深度解析1.1 设计动机与工程价值在基于mbed RTOS&#xff08;现为Mbed OS中CMSIS-RTOS v2兼容层&#xff09;的嵌入式实时系统开发中&#xff0c;互斥量&#xff08;Mutex&#xff09;是保障多任务共享资源安全访问的核…...

OpenClaw+GLM-4.7-Flash:自动化数据清洗与分析流程

OpenClawGLM-4.7-Flash&#xff1a;自动化数据清洗与分析流程 1. 为什么需要自动化数据流水线 作为一名数据分析师&#xff0c;我每天要处理大量原始数据。这些数据可能来自Excel表格、数据库导出或者网页抓取&#xff0c;格式混乱、缺失值多、重复记录频发。传统的手工清洗不…...