Python实现"验证回文串"的几种方法
作者:求兵 发布时间:2021-03-28 15:48:57
标签:Python,验证,回文串
一、LeetCode——125.验证回文串
1.问题描述
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
2.示例
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: True
示例 1:
输入: “race a car”
输出: False
示例 3:
输入: “!!!”
输出: True
二、解题分析
在排除空格及特殊字符的前提下,且不考虑字母大小写,字符串前后元素一一相同.
在字符串为空或只有一个字符时,应该返回True
字符串的元素全部是符号是应该返回True
三、解题思路及代码实现
方法一:字符串切片
创建一个空字符串s_new,通过遍历字符串s,将字符串s中的字母和数字,拼接到s_new中,
通过比较s_new[::-1] 和s_new得出结论。【字符串为有序的数据结构,可以对其进行切片操作】
代码如下:
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
# 创建一个空字符串
s_new = ''
# 遍历字符串s
for i in s:
# 判断,如果是字母或数字,将其转为小写拼接到字符串中
if i.isalnum():
s_new += i.lower()
# 切片后s_new[::-1]与s_new比较,并将结果返回
return s_new[::-1] == s_new
方法二:双游标判断
从字符串s两端指定两个游标low,high
如果low游标指向了 非字母和数字(即空格和符号),那么low游标往后移一位;
如果high游标指向了 非字母和数字(即空格和符号),那么high游标往前移一位;
直至low和high都指向了数字或字母,此时进行比较,是否相同。
如果比较的结果是True,则low往后移一位,high往前移一位
如果比较的结果是False,则直接返回False
重复上述判断,直至low和high重合,此时表示完成了字符串s内前后元素的一一对比判断,返回True即可。
代码如下:
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
low = 0
high = len(s) - 1
#在字符串为空或只有一个字符时,返回True
if len(s) <= 1:
return True
# 设定low和high对比的条件
while low < high:
# 如果不是字母或数字,low往后移一位【low < high为必须条件,不然会造成索引越界】
while not s[low].isalnum() and low < high:
low += 1
# 如果不是字母或数字,high往前移一位
while not s[high].isalnum() and low < high:
high -= 1
# 判断:如果相同,继续下一次对比;如果不相同,直接返回False
if s[low].lower() == s[high].lower():
low += 1
high -= 1
else:
return False
# low和high重合,即退出循环,表示前后都是一一对应的,返回True
return True
四、总结
来源:https://blog.csdn.net/qiubingcsdn/article/details/82500940


猜你喜欢
- 1、MySQL常用命令create database name; 创建数据库use databasename; 选择数据库drop data
- MySQL查询不使用索引汇总众所周知,增加索引是提高查询速度的有效途径,但是很多时候,即使增加了索引,查询仍然不使用索引,这种情况严重影响性
- 设置项目气动执行次方法(每天检查一次表记录)public class DayInterval implements ServletConte
- 今天研究了下Python中的传值问题,通常在C、C++中有按值传递和按引用传递两种情况,按值传递时会拷贝实参,而按引用传递时只是给形参赋了一
- 目前广泛使用的图像分类数据集之一是MNIST数据集。如今,MNIST数据集更像是一个健全的检查,而不是一个基准。为了提高难度,我们将在接下来
- 我们先简单的了解一些http的知识,从而理解该协议的无状态特性。然后,学习一些关于cookie的基本操作。最后,我会一步步阐述如何使用一些简
- 刚刚在学习些测试报告的时候,出现一个路径的问题,找了很久的原因,竟然是少了一个反斜杠引起的,在此顺便记录一下正反斜杠的作用。在Python中
- openlayer是目前我们gis常用的一款开源的,并且反馈都特别好的软件了,像之前的ol3, 风靡一时,地图实现也很简单,很实用,目前vu
- XPathXPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。XPath使用方
- 快速高效用:SET SQL_SAFE_UPDATES = 0;下面的就不要看了!今日用MySQL Workbench进行数据库的管理更新时,
- 1、快捷键win+r输入cmd回车调出cmd界面,在命令行输入python回车,显示python命令无法识别2、登陆python官网http
- windows环境下python2.7 脚本指定一个参数作为要检索的字符串例如: >find.py ./ hello# coding=
- batch的lstm# 导入相应的包import torchimport torch.nn as nnimport torch.nn.fun
- 关于浅拷贝和深拷贝想必大家在学习中遇到很多次,这也是面试中常常被问到的问题,借由这个时间,整理一下浅拷贝和深拷贝的关系先从一个简单的例子入手
- Go Gin 实现文件的上传下载流读取文件上传routerrouter.POST("/resources/common/uploa
- 0.前言回调函数是一种在编程中常见的技术,通常在异步编程中使用。简单来说,回调函数是一个被传递给另一个函数的函数,它在该函数的某个时间点被调
- 因为需要一个html形式的数据统计界面,所以做了一个基于pyecharts包的可视化程序,当然matplotlib还是常用的数据可视化包,只
- 先上效果,视频敬上:字符舞:代码舞源代码:video_2_code_video.pyimport argparseimport osimpo
- 将Vue0.1里的过滤代码添加到Vue2.0,方法很简单,具体内容如下var filters = {orderBy: orderBy, fi
- 官网地址:https://www.mysql.com/安装建议:尽量不要用.exe进行安装,用压缩包安装,对日后的卸载更为方便下载地址:ht