list @size 验证_第33期:上海自来水来自海上,回文字符串验证!
我准备了 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”等等就是回文串。
当然,对于本题而言,因为原字符串还包括了除字母,数字之外的一些幺蛾子,所以我们第一步可以考虑将其替换。因为使用正则实在是方便,所以直接用正则替了。
//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 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 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 {
while (!isalnum(s[i]) && i while (!isalnum(s[j]) && i 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、总结
万丈高楼平地起,盘龙卧虎高山齐。希望大家对于回文串的判断烂熟于心,为后面的题目做好准备~



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

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

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

- 《程序员修炼之道》(推荐67%)
- 《代码整洁之道》(推荐66%)
- 《代码大全》(推荐42%)
- 《重构》(推荐35%)
- 《深入浅出设计模式》(推荐29.4%)
- 《人月神话》(推荐27.9%)
- 《设计模式》(推荐25%)
- 《算法导论》(推荐17.6%)
大家怎么看呢?评论区留下你的想法吧!
相关文章:

安装apache的时候80端口被PID为4的系统进程所占用
由于工作中需要直接从MySQL后台读取数据,所以安装了PHPnow,装的过程中提示Apache安装失败,80端口被占用。 在cmd中输入netstat –ano命令,发现80端口被一个PID为4的服务所占用,打开任务管理器,发现PID为4的…

PHP根据时间戳返回星期几
为什么80%的码农都做不了架构师?>>> <?php /*** 根据时间戳返回星期几* param string $time 时间戳* return 星期几*/ function weekday($time) {if(is_numeric($time)){$weekday array(星期日,星期一,星期二,星期三,星期四,星期五,星期六);return…

FastCGI与php-fpm
FastCGI:为了兼顾IIS下PHP的效率和安全,微软给出了FastCGI的解决方案。同ISAPI原理有些类似,就是减少CGI初始化等前置操作的消耗。FastCGI可以让PHP的进程重复利用而不是每一个新的请求就重开一个进程。同时FastCGI也可以允许几个进程同时执行…

postmaster.c 中的 ListenAddresses
在 postmaster.c 中看到这种代码,从Java程序员的角度,看起来是很不爽的: char *ListenAddresses; ...if (ListenAddresses){ char *rawstring; List *elemlist; ListCell *l; ... 到底何…

PHPCMS V9 杂记一
PHPCMS V9加载顺序 PHPCMS V9和V8相比,总体思路方向是一样,不同的是V9把OOP和MVC结合得更加完美。 打开根目录下面的index.php 三行代码,相比V8的 index.php来说 更加清楚, phpcms下面的base.php文件,是一个基础类&…

esp32 camera_利用Phyphox和ESP32蓝牙制作欧姆表测电阻
近日,微主在利用Phyphox和ESP32蓝牙研究热敏电阻的阻值与温度的关系时,需要绘制热敏电阻阻值与时间的关系图像,通过用手捏住或者放开热敏电阻,观察电阻与时间关系图像的变化情况,进而了解温度对热敏电阻的影响。将热敏…

linux tomcat集群配置笔记
趁最后一天假期,配置linux环境下的apache集群,巩固下,免的以后用到又忘记,网上东拼息凑,环境弄好后,整到blog,以便以后用到。 参考来源:http://www.linuxidc.com/Linux/2011-03/32859.htm 我用的版本: httpd-2.2.21.tar.gz apache-tomcat-6.0.32.tar.gz …

spring -- 自定义注解
我们直接通过代码解释自定义注解的使用及各个含义 package com.sysware.cloud.dts.annotation;import java.lang.annotation.*;Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD}) Inherited Documented public interface DtTransactional {/** Whether need to…

angular 字符串转换成数字_蓝盟IT外包,Python算法的一般技术和嵌入式库|python|字符串|key|算法|调用...
近年来,随着python着火,python也开始受到很多程序员的喜爱。 很多程序员已经开始使用python作为第一语言。最近在python上刷问题时,我想去找python的刷问题常用库api和刷问题技术。 和c的STL库文档一样,但很遗憾没有找到。 因此&a…

Mapping Persistence Classes 笔记2---ValueType的形式和映射
2010年5月17日 简介: 前面的笔记着重讲解了实体类以及其class-mapping options,本章笔记将关注值类型的形式以及其OR映射选项。 值类型一般可分为两类:JDK类型和用户自定义类型。本章首先从实体类的使用JDK类型的properties开始,讲…

安装wampserver及配置php,phpmyadmin遇到的问题及解决方法
wampserver 安装好以后,打开,发现appache无法启动,查了一下,发现是前安装过iis,iis使用80端口,打开httpd.conf,把里面所有的80都改成了81,然后appache就可以正常启动了。 再配置wamp…

as一种模拟输入效果
这个小程序展现的是一种模拟输入的效果,比如你在键盘上随便输入什么,在屏幕上就会依次的显示“这句话不是我输入的,呵呵”。比较有意思。 var s:Sprite new Sprite; var t:TextField new TextField(); var i:Number0; var myText:String&qu…

signature验证/salt验证/token验证的作用
1.salt验证: salt是随机生成的一串字符,salt验证的作用是将生成的salt与加密的密码密文拼接后再次加密存储 这样可以是存储在数据库中的密码更加安全 2.signature验证: I、将token, timestamp, nonce, encrypt的内容按照大小字母顺序排列 II、按顺序将列表中排序号的内容拼接成…

算法导论课后习题解析 第四章 上
4.1-1 返回只包含绝对值最小的元素的子数组。 4.1-2 Maximun-Subarray(A)max -infinityfor i 1 to A.lengthsum 0for j i to A.lengthsum sum A[i]if sum > maxmax sumlow ihigh jreturn (low, high, max)每次内循环都利用上次累加的结果,避免重复运算…

win10商店打不开_科技资讯:Win10系统电脑的应用商店老是打不开还闪退怎么办
最近关于Win10系统电脑的应用商店老是打不开还闪退怎么办在网上的热度是非常高的,很多网友们也都是非常关注Win10系统电脑的应用商店老是打不开还闪退怎么办这个事情,为此小编也是在网上进行了一番搜索查阅相关的信息,那么如果说有感兴趣的网…

[原]tornado源码分析系列(三)[网络层 IOLoop类]
引言:由于都是在工作当中抽出时间看源代码,所以更新速度比较慢,但是还是希望通过对好的源码的分析和探讨,大家相互学习,发现不好的地方共同讨论。 上次讲了IOLoop中的几个重要的方法,inistance() 和 add_ha…

参悟JavaScript
引子 编程世界里只存在两种基本元素,一个是数据,一个是代码。编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力。 数据天生就是文静的,总想保持自己固有的本色;而代码却天生活泼,总想改变这个世…

SQL数据库无法附加 系统表损坏修复 数据库中病毒解密恢复
SQL数据库无法附加 系统表损坏修复 数据库中病毒解密恢复 开发此工具是为了 让手工恢复数据库物理故障时 更加简单便捷直观, 本工具用于物理修复独立处理大部分问题以及与DBCC配合完成修复各种数据库错误.特别是针对大型数据库上百G 上TB数据库,节约大量时间精力。 …

ODP.NET调用存储需要使用事务
今天发生在用ODP.NET调整一个存储过程时发生了两个奇怪的错误。 ORA-08103: object no longer exists ora-01410: invalid rowid网上都说是索引块有错误什么的,我索引也重建,表也重建了,但还是不行。 奇怪的是我直接测试存储过程是有结果的。…

HDU-1698-Just a Hook
HDU-1698-Just a Hook http://acm.hdu.edu.cn/showproblem.php?pid1698 还是成段更新线段树 #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 100005 struct cam {int x;int y;int sum;int val; }list[N*4]; void build(int k,int x,in…

sketchup 255个su常用插件)_SketchUp领域的知乎,有胆来问!
你知道知乎、豆瓣、果壳……但你可能不知道【问吧】这是一个 SketchUp 领域的知乎(点击文末“阅读原文”可直接进入【问吧】)你可以找到关于 SketchUp 的任何话题:SketchUp、Vray、建模、插件、曲面、SUAPP、组件、导入、材质、渲染、导出、贴图、材质、错误报告、L…

js简单的抽屉菜单
闲暇时间用Jquery写了一个js简单的抽屉菜单。。<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml" > <…

checkedListBox的使用
1.添加项checkedListBox1.Items.Add("蓝色"); checkedListBox1.Items.Add("红色"); checkedListBox1.Items.Add("黄色");2. 判断第i项是否选中,选中为true,否则为falseif(checkedListBox1.GetItemChecked(i)){return t…

Windows Phone开发(39):漫谈关键帧动画上篇 转:http://blog.csdn.net/tcjiaan/article/details/7550506...
尽管前面介绍的几种动画会让觉得很好玩了,但是,不知道你是否发现,在前面说到的一系列XXXAnimation中,都有一个共同点,那就是仅仅针对两个值的目标值之间产生动画,如果使用By,将在原值和加上By后…

性能定位常用命令整理
统计每秒钟Nginx收到多少请求: cat access.log | grep 2019:20:19:50 | wc -l 解释:access.log为Nginx的日志,通过Nginx的配置文件nginx.conf查看日志文件名称和位置,2019:20:19:50 表示获取20点19分50秒接收的请求数,…

4块硬盘做raid几_HP-P4500存储RAID硬盘离线数据恢复案例
在这里北亚小编分享一篇关于HP-P4500存储RAID硬盘离线数据恢复案例,经客户描述:一台HP-P4500的存储系统,底层是12块1TB的硬盘组的RAID。其中每6个1TB的盘一组,第一组的前面一部分组了一个RAID01,是存放HP-P4500嵌入式系…

十个利用矩阵乘法解决的经典题目
出自matrix67.com 好像目前还没有这方面题目的总结。这几天连续看到四个问这类题目的人,今天在这里简单写一下。这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质。 不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符。在数学中&…

maven生命周期理解
你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。 知道了每套生命周期的大概用途和相互关系以后,来逐个详细看一下每套生命周期,Clean和Site相对比较简单&…

安装envi出现cannot find lincese_Ubuntu 16.04 安装 CUDA10.1 (解决循环登陆的问题)
0. 前言直接用 cuda安装文件同时安装 NVIDIA 驱动和 CUDA,没有单独安装更高版本的 NVIDIA 驱动;为避免浪费显存,图形化界面显示是在Intel 集显环境下,NVIDIA 独显做计算;循环登陆问题是因为安装时没有加 --no-opengl-l…

POJ1067_取石子游戏_威佐夫博弈
/* *State: 1067 Accepted 176K 16MS C 435B *题目大意: * 威佐夫博弈 *解题思路: * 略。 */ #include <iostream> #include <stdio.h> #include <cmath> using namespace std;int main(void) {int big,…