今天是小浩算法 “365刷题计划”- 储备日。 难顶,我本来今天在写最长回文子串这个题目。然后我突然在想,直接讲这个会不会仍然有同学看不懂,为什么不从最简单的讲起呢。于是,今天的文章诞生了。于是,小浩又熬夜到了凌晨。

01、题目示例

见微知著,发现一组数据很有趣,分享给大家。leetcode 第一题通过次数为 993,335,第二题通过次数为 396,160,第三题通过次数为 69,508。我想说什么,请自己悟。

第125题:验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明: 本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true

示例 2:

输入: "race a car"
输出: false

02、图解教程

经典题目,你需要像掌握反转字符串一样掌握本题。

首先,我想确保你知道什么是回文串。“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。

当然,对于本题而言,因为原字符串还包括了除字母,数字之外的一些幺蛾子,所以我们第一步可以考虑将其替换。因为使用正则实在是方便,所以直接用正则替了。

//JAVA
s = s.toLowerCase().replaceAll("[^0-9a-z]", "");

假若原字符串为:

A man, a plan, a canal: Panama

替换完就是这样:

amanaplanacanalpanama

剩下的就很简单了,我们同时遍历两边的字符,如果不等直接就返回 false,代码基本就是这样(因为实在简单到无地自容,所以我不知道如何画图…)

//JAVA
class Solution { public boolean isPalindrome(String s) { s = s.toLowerCase().replaceAll("[^0-9a-z]", "");char[] c = s.toCharArray(); int i = 0, j = c.length - 1; while (i < j) { if (c[i] != c[j]) return false; i++;j--;}return true;}
}

执行结果:


然后上面的代码大家肯定也觉得简单的一批。但是既然我们都知道哪些字符是幺蛾子(除了字母和数字,都是幺蛾子),为啥子不直接遍历的时候跳过嘞?这样是不是就不用先做一个替换的预处理了。

//JAVA
class Solution {public boolean isPalindrome(String s) {s = s.toLowerCase();char[] c = s.toCharArray();int i = 0;int j = s.length() - 1;while(i < j) {if (!((c[i] >= '0' && c[i] <= '9') || (c[i] >= 'a' && c[i] <= 'z'))) {i++;continue;}if (!((c[j] >= '0' && c[j] <= '9') || (c[j] >= 'a' && c[j] <= 'z'))) {j--;continue;}if(c[i] != c[j]){return false;}i++;j--;}return true;}
}

执行结果:

好吧,那既然我们都可以把幺蛾子跳过了,那有木有现成的跳过幺蛾子的API来用嘞?我找了找,java 中没有特别现成的拿来主义,但是我又不想造轮子,那就去别的语言里找找呗。

//CPP
class Solution {public:bool isPalindrome(string s) {for (int i = 0, j = s.size() - 1; i < j; i++, j--)     {while (!isalnum(s[i]) && i < j) i++;       while (!isalnum(s[j]) && i < j) j--;   if (toupper(s[i]) != toupper(s[j])) return false;}return true;}
};

提示:isalnum() 方法检测字符串是否由字母和数字组成,是c++标准库函数。当然,c库也有

但是这样感觉代码还是好长好难受,有没有更加简洁的写法?祭出大杀器!

//py3
class Solution:def isPalindrome(self, s: str) -> bool:s = list(filter(str.isalnum, s.lower()))return s == s[::-1]

然后,我还想祭出终极大杀器 之 战斗魔鬼!

03、总结

万丈高楼平地起,盘龙卧虎高山齐。希望大家对于回文串的判断烂熟于心,为后面的题目做好准备~

今天的题目到这里就结束了。你学会了吗?快来评论区留下你的想法吧!


我把我写的所有题解都整理成了一本电子书,每道题都配有完整图解。点击即可下载

上海自来水来自海上,一文掌握这类字符串的验证!相关推荐

  1. list @size 验证_第33期:上海自来水来自海上,回文字符串验证!

    我准备了 1000 本电子书和计算机各领域高清思维导图 100 张,关注后回复[资源],即可获取!更可回复[内推]加入 BAT 内推群! 01.题目示例 见微知著,发现一组数据很有趣,分享给大家.le ...

  2. c++ string 回文串_第33期:上海自来水来自海上,回文字符串验证!

    我准备了 1000 本电子书和计算机各领域高清思维导图 100 张,关注后回复[资源],即可获取!更可回复[内推]加入 BAT 内推群! 01.题目示例 见微知著,发现一组数据很有趣,分享给大家.le ...

  3. 回文串问题(leetcode 125. 验证回文串 c#)

    leetcode 125. 验证回文串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: &quo ...

  4. 上海电子地图 来自百度电子地图库 含15、17、最高级别19级地图

    上海电子地图 来自谷歌电子地图库 含15.17.最高级别19级地图,一般来说商业用图差不多就是17级左右,提供的下载完全满足大多数人浏览使用. 百度网盘下载资源:http://pan.baidu.co ...

  5. 一文简述如何使用嵌套交叉验证方法处理时序数据 @ 机器之心

    本文讨论了对时序数据使用传统交叉验证的一些缺陷.具体来说,我们解决了以下问题: 1)在不造成数据泄露的情况下,对时序数据进行分割: 2)在独立测试集上使用嵌套交叉验证得到误差的无偏估计: 3)对包含多 ...

  6. 最新ChatGPT GPT-4 NLU实战之文档问答类ChatPDF功能(附ipynb与python源码及视频)——开源DataWhale发布入门ChatGPT技术新手从0到1必备使用指南手册(五)

    目录 前言 最新ChatGPT GPT-4 自然语言理解NLU实战之文档问答类ChatPDF功能 引言 ChatGPT 接口 Qdrant数据库Embedding存储 核心代码 测试 其它NLU应用及 ...

  7. XML文档操作工具类

    1 /// <summary> 2 /// XML文档操作工具类 3 /// </summary> 4 public class XmlUtil 5 { 6 #region X ...

  8. 导出Excel出现“异常来自 HRESULT:0x800A03EC”错误的解决方法(已验证)

    导出Excel出现"异常来自 HRESULT:0x800A03EC"错误的解决方法(已验证) 参考文章: (1)导出Excel出现"异常来自 HRESULT:0x800A ...

  9. DCMTK:表示来自细分ID的细分的类

    DCMTK:表示来自细分ID的细分的类 表示来自细分ID的细分的类 表示来自细分ID的细分的类 #include "dcmtk/config/osconfig.h" #includ ...

  10. 上海应用技术大学计算机研究生院,计算机考研调剂|2018年上海应用技术大学计算机学院计算机大类考研调剂信息...

    成绩出来之后大家都开始着手准备调剂了,快来看看小编为大家整理的考研调剂信息:2018年上海应用技术大学计算机学院计算机大类考研调剂信息.小编为大家精心准备了计算机考研热门高校备考指南还有计算机专业考研 ...

最新文章

  1. 优秀的网工都会NAT
  2. AJAX并不神秘:揭密各种AJAX控件和类库
  3. 算法设计与分析——回溯法——装载问题
  4. 安阳师范学院计算机与信息工程学院吴琴霞,基于甲骨文字形动态描述库的甲骨文输入方法...
  5. NetBeans 时事通讯(刊号 # 80 - Nov 15, 2009)
  6. 解析数论 2: Abel求和法
  7. 网页中添加QQ链接,别人一点就能和我进行QQ聊天
  8. 计算机硬件的主要性能指标包括,计算机硬件系统有哪些主要的性能指标
  9. 微信小程序正式上线,服务端请求必须HTTPS
  10. 雨听|Mac使用“打印”将文件保存为本地PDF
  11. 3dsmax怎么添加uv坐标_3dmax缺少贴图坐标怎么添加uvmap修改器
  12. java android studio 安卓开发 - 使用java发送邮件
  13. STM32:DMA方式接收SPI总线数据,并按照协议进行处理
  14. 超调量怎么计算公式_超调量如何计算?
  15. vue css变量实现多主题皮肤切换
  16. 找到了腾讯云代金券两个领取入口(太值了)
  17. 零基础大数据该学什么?
  18. 从调整RSRQ测量参数提升4G驻留比
  19. 《反黑客工具大曝光》第4版
  20. 【DB宝46】NoSQL数据库之CouchBase简介、集群搭建、XDCR同步及备份恢复

热门文章

  1. VOT 数据集下载toolkit
  2. 各种颜色十六进制代码表
  3. 琢磨事琢磨人琢磨钱,成大事也!
  4. [HTB]Nunchucks
  5. [转]河北省生源地助学贷款流程及注意事项
  6. linux 查看wav文件内容,Linux 播放wav文件
  7. 如何计算机内存的品牌,如何检查计算机内存模块的品牌?如何检查计算机的内存...
  8. 修复计算机命令行,命令提示符修复系统方法
  9. Elasticsearch-Kibana 8.3.2 集群安装搭建-Linux
  10. 有没有测试牙齿需不需要修正的软件,测一测,你的牙齿需要矫正吗?