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

125. 验证回文串

目录

一、问题描述

二、解题思路

三、代码

四、复杂度分析


一、问题描述

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

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

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

二、解题思路

✅ 题目要求

判断一个字符串是否是回文串忽略大小写并且忽略非字母数字字符


✅ 解题关键点

  1. 忽略大小写 → 所以我们要用 tolower() 把字符都转成小写。

  2. 只保留字母和数字 → 所以要用 isalnum() 判断是否是有效字符(字母或数字)。

  3. 对称比较字符 → 使用双指针(从两端往中间走)判断字符是否一致。


✅ 举例说明:

示例:"A man, a plan, a canal: Panama"
  1. 过滤掉空格、标点,只保留字母数字 → "AmanaplanacanalPanama"

  2. 转为小写 → "amanaplanacanalpanama"

  3. 判断是否正着读和反着读一致(是回文)→ ✅


✅ 双指针解法步骤(模拟过程):

假设原字符串是 "ab#cB!a"
过滤后变成 "abcba"

  • left = 0,指向 'a'

  • right = 6,指向 'a'
    → 相等,继续

  • left = 1,指向 'b'

  • right = 5,指向 'B' → 转成小写后也等,继续

  • left = 2,指向 'c'

  • right = 4,指向 'c' → 相等,继续

最终 left >= right,说明每一对字符都匹配 → ✅ 是回文

三、代码

class Solution {
public:bool isPalindrome(string s) {int left = 0;                  // 左指针,指向字符串开头int right = s.size() - 1;     // 右指针,指向字符串末尾while (left < right) {// 如果左指针不是字母或数字,向右移动while (left < right && !isalnum(s[left])) ++left;// 如果右指针不是字母或数字,向左移动while (left < right && !isalnum(s[right])) --right;// 对比当前字符(都转成小写),不相等则不是回文if (tolower(s[left]) != tolower(s[right])) {return false;}// 移动两个指针继续比较++left;--right;}return true;  // 成功通过所有对比,说明是回文}
};

四、复杂度分析

项目复杂度说明
⏱ 时间复杂度O(n)每个字符最多遍历一次
🧠 空间复杂度O(1)使用双指针,不额外开辟空间(不存储新字符串)
http://www.lryc.cn/news/570683.html

相关文章:

  • 学习信号量 sem_init、sem_destroy、sem_post、sem_wait、sem_trywait、sem_getvalue
  • Android-常用基本控件
  • Linux禁用CTRL+ALT+DEL重启系统
  • linux下阅读.caj文件
  • open函数的用法:
  • 仿淘宝中心轮播图 JS[代码+详细讲解+效果图]
  • 程序员必备的15个接单平台,拥有即将获得“钞能力”!
  • “生日贺卡祝福”源代码编写打印
  • 制作简单的HTML个人网页指南
  • 大模型笔记2:提示词工程
  • three.js 通过 Reflector.js 创建镜面反射
  • 【GDB】修改程序的二进制文件
  • 毕业设计基于微信小程序的高校车辆管理系统的设计与实现
  • RSS源推荐大全
  • ssh学习整理笔记
  • 深入理解滑动窗口算法:原理、应用与 C++ 实现
  • 安装 WSL2 与设置​
  • 统计学(第8版)——第一至第三章基础概念(选择判断题)
  • 网易云音乐mp3外链-真实地址下载方法
  • 数据库查询(橙子科技学习笔记)
  • openSUSE-Leap-15.4-DVD-x86_64的日常使用设置
  • Python函数基础知识(2/3)
  • 2. Anaconda 的安装及 Pytorch 环境安装
  • 单点登录业务介绍及技术解决方案
  • HTC G12 HBOOT 2.0.0002 官解、降级精简教程!
  • Postman接口测试-POST请求
  • CrossApp环境搭建
  • 成功解决“以太网适配器的驱动程序可能出现问题”
  • flash广告_广告设计中Flash图形动画的应用
  • 【Python】成功解决ModuleNotFoundError: No module named ‘pandas