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

125. 验证回文串【 力扣(LeetCode) 】

一、题目描述

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

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

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

二、测试用例

示例 1:

输入: s = "A man, a plan, a canal: Panama"
输出:true
解释:"amanaplanacanalpanama" 是回文串。

示例 2:

输入:s = "race a car"
输出:false
解释:"raceacar" 不是回文串。

示例 3:

输入:s = " "
输出:true
解释:在移除非字母数字字符之后,s 是一个空字符串 "" 。
由于空字符串正着反着读都一样,所以是回文串。

提示:

1 <= s.length <= 2 * 105
s 仅由可打印的 ASCII 字符组成

三、解题思路

  1. 基本思路:
      头指针+尾指针,一直判断是否相等,直到两指针相遇或者字符不相等停止
  2. 具体思路:
    • 预处理:定义 trim(string& s) 函数,功能是删除非字母或数字的字符,并且字符转小写。使用双指针实现,i 指针用于保存字符,j 指针用于遍历,遇到要保持的就赋值给 i 指针,最后删除多余字符。
    • 双指针遍历:先使用 trim 函数处理字符串;因为回文串中心对称,所以我们从两端开始一直判断是否相同。定义头指针 i 和尾指针 j ,初始化为 0n-1 。判断两指针所指字符是否相同,相同就继续判断下一个,i++j-- 。不同则表示不是回文串,返回 false 。直到两指针相遇都相同,则表示是回文串,返回 true

四、参考代码

时间复杂度: O ( n ) \Omicron(n) O(n)
空间复杂度: O ( 1 ) \Omicron(1) O(1)

class Solution {
public:void trim(string& s) {int n = s.length();int i = 0, j = 0;while (j < n) {s[j] = tolower(s[j]);if (isalnum(s[j])) {s[i++] = s[j++];} else {j++;}}s.erase(i, n - i);}bool isPalindrome(string s) {trim(s);int n = s.length();for (int i = 0, j = n - 1; i < j; i++, j--) {if (s[i] != s[j]) {return false;}}return true;}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 设计模式 - 状态模式
  • 详解使用Goalng+Redis实现分布式锁
  • haralyzer 半自动,一次性少量数据采集快捷方法
  • C++系列-继承中的对象模型
  • Spring Boot 使用 MongoDB 教程
  • SpringBoot日志整合
  • 大数据-70 Kafka 高级特性 物理存储 日志存储 日志清理: 日志删除与日志压缩
  • 第五天:java网络编程、JDBC与高级特性概览
  • 推荐一个根据后台提供的接口json文件自动生成前端调用接口的插件typescript
  • Mysql基础篇
  • Java高级Day28-让坦克动起来
  • 保命指南,家里有浮毛、异味竟会危害健康?去浮毛空气净化器推荐
  • vue的混入介绍
  • 我常用的几个傻瓜式爬虫工具,收藏!
  • Luminar Neo for Mac/Win:创新AI图像编辑软件的强大功能
  • CSS 专业技巧
  • Laravel 中的一个后期静态绑定
  • MySQL的数据类型
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Spark学习笔记之相关记录
  • zookeeper系列(七)实战分布式命名服务
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 入门到放弃node系列之Hello Word篇
  • 译有关态射的一切
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​​​​​​​​​​​​​​Γ函数
  • ​插件化DPI在商用WIFI中的价值
  • ‌JavaScript 数据类型转换
  • #java学习笔记(面向对象)----(未完结)
  • #LLM入门|Prompt#3.3_存储_Memory
  • (13)Hive调优——动态分区导致的小文件问题
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (day18) leetcode 204.计数质数
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (四)stm32之通信协议
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)树状数组
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .a文件和.so文件
  • .NET 表达式计算:Expression Evaluator
  • .net 受管制代码
  • .NET 依赖注入和配置系统
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET关于 跳过SSL中遇到的问题
  • .NET命名规范和开发约定
  • .net实现客户区延伸至至非客户区
  • /var/spool/postfix/maildrop 下有大量文件
  • @vue/cli 3.x+引入jQuery
  • [ solr入门 ] - 利用solrJ进行检索
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法