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

验证回文串1

1.题目:125. 验证回文串 - 力扣(LeetCode)

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 

2.解题思路

去除特殊字符,如标点符号和空格,仅保留英文字母和阿拉伯数字,并且大写变小写。

这里需要借助于c++的库函数,有如下几个:

  1. isalnum(ch):检查字符 ch 是否是字母或数字。返回0(即为假)或非零值(真)。
  2. tolower(ch):将大写字母转换为小写。如果字符不是大写字母,则返回原字符。toupper,小写变大写。
  3. string sgood_rev(sgood.rbegin(), sgood.rend()):翻转字符串sgood为sgood_rev。使用了 rbegin()rend(),用于获取反向迭代器。直接当成反转字符串的方法用即可。

3.参考代码

解法一

class Solution {
public:bool isPalindrome(string s) {// 先去除空格以及标点符号,并将大写字母转为小写string sgood;for (char c : s) {if (isalnum(c)) {sgood += tolower(c);}}// 得到清理后的字符串后再进行翻转string sgood_rev(sgood.rbegin(), sgood.rend());return sgood == sgood_rev;}
};

解法二:双指针

 

class Solution {
public:bool isPalindrome(string s) {// 双指针int L = 0;int R = s.size() - 1;while (L <= R) {// 跳过特殊字符while (!isalnum(s[L]) && L <= R) {L++;}while (!isalnum(s[R]) && L <= R) {R--;}// 比较对称位置元素if (L <= R) { // 再次判断if (tolower(s[L]) != tolower(s[R])) {return false;}L++;R--;}}return true;}
};

在用解法二做题时,遇到了 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ,说明发生了地址越界错误!!!这个一定要注意!可以用空字符串为例,进行思考。

另外一个错误就是,跳过特殊字符时也需要进行循环处理。

错误代码如下:

class Solution {
public:bool isPalindrome(string s) {// 双指针int L = 0;int R = s.size() - 1;while (L <= R) {// 跳过特殊字符if (!isalnum(s[L])) {L++;}if (!isalnum(s[R])) {R--;}// 比较对称位置元素if (tolower(s[L]) != tolower(s[R])) {return false;}L++;R--;}return true;}
};

http://www.xdnf.cn/news/5861.html

相关文章:

  • Linux sysvinit 系统启动
  • 【三】 空域滤波的基础与空域中的低通滤波器(2)【830数字图像处理】
  • 解构赋值
  • RuoYi 中使用 PageUtils.startPage() 实现分页查询的完整解析
  • 数字ic后端设计从入门到精通4(含fusion compiler, tcl教学)CMOS VLSI Design
  • Baumer工业相机堡盟工业相机的工业视觉是否可以在室外可以做视觉检测项目
  • 【系统架构师】2025论文《基于架构的软件设计方法》【最新】
  • telnetlib源码深入解析
  • Java面试终极篇:Sentinel+Seata+Kafka Streams高并发架构实战
  • Adobe Acrobat pro在一份PDF中插入空白页
  • 【基于ALS模型的教育视频推荐系统(Java实现)】
  • java反序列化commons-collections链6
  • 邮件营销应对高退信率的策略
  • 一键解锁嵌入式UI开发——LVGL的“万能配方”
  • AI驱动网络范式革新:Smart Switch与智能路由的协同进化
  • 《飞飞重逢》手游:暴力治疗与团队赋能的战场艺术!
  • feign.RequestInterceptor 简介-笔记
  • 深入浅出:Java 中的动态类加载与编译技术
  • 2025.5.12 APIO 模拟赛总结
  • 小结: Port Security,DHCP Snooping,IPSG,DAI,
  • python opencv 将不同shape尺寸的图片制作video视频
  • 法国蒙彼利埃大学团队:运用元动力学模拟与马尔可夫状态模型解锁 G 蛋白偶联受体构象动态机制
  • Linux 服务器用 SSH 拉取多个 Git 工程
  • LeRobot 项目部署运行逻辑(七)—— ACT 在 Mobile ALOHA 训练与部署
  • 开发工具分享: Web前端编码常用的在线编译器
  • Matlab 基于滑模自抗扰的高速列车自动驾驶算法研究
  • Linux 软硬连接详解
  • linux下minio的进程管理脚本
  • LMFD格子多相流体力学仿真机:超级计算如何实现平民化?
  • Java高频面试之并发编程-16