我准备了 1000 本电子书和计算机各领域高清思维导图 100 张,关注后回复【资源】,即可获取!更可回复【内推】加入 BAT 内推群!

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”等等就是回文串。

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

//JAVAs = 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             if (c[i] != c[j]) return false;             i++;            j--;        }        return true;    }}

执行结果:


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

//JAVAclass Solution {    public boolean isPalindrome(String s) {        s = s.toLowerCase();        char[] c = s.toCharArray();        int i = 0;        int j = s.length() - 1;        while(i             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 中没有特别现成的拿来主义,但是我又不想造轮子,那就去别的语言里找找呗。

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

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

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

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

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


03、总结

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

我们欢迎你!

我把我写的所有题解、以及一百张思维导图和一千本开源电子书都放在了公众号中~下方扫码回复【资源】即可获取!同时可回复【招聘】加入 BAT 万人求职群!


随意展示一张导图内容(所有的子节点都可以打开):

 今日论点:

哪些编程书经常被大佬推荐?

  • 《程序员修炼之道》(推荐67%)
  • 《代码整洁之道》(推荐66%)
  • 《代码大全》(推荐42%)
  • 《重构》(推荐35%)
  • 《深入浅出设计模式》(推荐29.4%)
  • 《人月神话》(推荐27.9%)
  • 《设计模式》(推荐25%)
  • 《算法导论》(推荐17.6%)

大家怎么看呢?评论区留下你的想法吧!

c++ string 回文串_第33期:上海自来水来自海上,回文字符串验证!相关推荐

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

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

  2. java栈和队列验证回文串_栈和队列的基本操作及其应用(回文判断)

    实验二栈和队列的基本操作及其应用 一.实验目的 1.掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用. 2.掌握栈和队列的特点,即后进先出和先进先出的原则. 3.掌握栈和队列的基本运算, ...

  3. java 最长回文串_通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)...

    1. 回文串 作为程序员,回文串这个词已经见怪不怪了,就是一个字符串正着读和反着读是一样的,形式如abcdcba.bbaabb.这里涉及到奇回文和偶回文,奇回文指回文串的字符数是奇数,偶回文指回文串的 ...

  4. 最长回文串_第78天——第78题(最长回文串 )

    今天又是阴天,不过阴天凉快,我喜欢. 第78天--第78题(最长回文串) 看题目! 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 ...

  5. 扫描二维码读取文档_使用深度学习读取和分类扫描的文档

    扫描二维码读取文档 To many people's dismay, there is still a giant wealth of paper documents floating out the ...

  6. activiti 文档_那些可多人协作编辑的在线文档工具

    最近使用了下石墨文档,简直就是在线版的Word,Excel,PPT,而且可以多人实时编辑预览,真的太好用了,搜索了下发现这种在线文档工具还挺多的,这里做个整理推荐. 石墨文档 这个很多人应该都用过,石 ...

  7. 500个爆文标题_我研究了999篇100万+爆文,终于发现这10条标题规律!

    易撰 文章想要"爆",标题一定要妙! 标题是文章的眉目,是文章内容和读者情感之间的第一个接触点,是让人一见钟情的因子. 一个好的题目,能激起读者点击阅读的兴趣,有着眉目传神之妙用. ...

  8. 开发接口文档_更优更稳更好,看文档驱动开发模式在AIMS中的优势

    ​[摘要]程序员常会说:我最讨厌别人写的代码没有文档,我也最讨厌自己需要写文档. 有一个很老的梗: 我最讨厌别人写的代码没有文档,我也最讨厌自己需要写文档. 有这种想法的程序员应该算是一个老鸟了,对于 ...

  9. java 图片 word文档_【Java】用Freemarker完美导出word文档(带图片)

    Java  用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...

最新文章

  1. 2018-4-17论文《一种基于了领导策略的狼群搜索算法》
  2. 网站优化中应该注意的细节有哪些?
  3. 【树莓派】为Ubuntu for ARM 更换中国软件源
  4. 浅谈深浅拷贝问题(这里只针对拷贝构造函数和赋值运算符重载)和简易srting类模拟实现
  5. mac boot2docker certs not valid with 1.7
  6. 2.2 string
  7. 团队计划(4.27)
  8. ckeditor ——在图片上传中上传其他文件(word等)
  9. Linux内核源代码分析-第二章 代码初识-2
  10. 今日复习的linux命令
  11. 读取敏感词库内容,讲某段字符里面的敏感词替换成*
  12. 银行窗口排队叫号系统实现
  13. 概率论基础知识(书本摘录总结)
  14. c语言中term,CTerm
  15. 51单片机学习笔记(2)——51单片机简介
  16. 【数据分析认知课(一):数据分析思维观】——读后感
  17. php7列目录_linkinfo()
  18. 首次分享!如何做出好看的Excel可视化图表?
  19. 怎么关闭服务器管理器自动启动,用 systemctl 管理服务:查看状态、启动/停止服务、开启/取消开机自启动...
  20. FineReport 数据决策系统

热门文章

  1. VS2005、VS2010等VS系列IDE在MFC开发过程中,Resource View标签打不开,问题为“opened in other editor”
  2. 北大程序设计实习MOOC 编程作业 《魔兽世界之二:装备》
  3. swagger 修改dto注解_一文搞懂Swagger,让你明白用了Swagger的好处!!!
  4. python读取配置文件存在某配置_Python读取ini配置文件的方式
  5. c语言编程从键盘上输入两个整数m和n,C语言习题 求键盘输入的两个正整数的最大公约数和最小公倍数...
  6. 【音频处理】IIR滤波器设计(一)Biquad 滤波器
  7. TensorFlow-RNN循环神经网络 Example 1:预测Sin函数
  8. Spring之项目中pofile的应用
  9. Predicate函数式接口
  10. nginx关闭websocket