Python实现"验证回文串"的几种方法
作者:求兵 时间:2021-03-28 15:48:57
一、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
标签:Python,验证,回文串
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Laravel框架路由管理简单示例
2023-11-14 13:37:26
详解Python如何使用Netmiko进行文件传输
2021-06-20 19:49:17
![](https://img.aspxhome.com/file/2023/7/68337_0s.png)
Python AES加密模块用法分析
2021-05-29 05:13:58
python实现简单成绩录入系统
2023-09-16 08:00:27
Python科学计算包numpy用法实例详解
2021-11-12 15:07:20
Python Pandas学习之基本数据操作详解
2021-11-07 17:46:56
![](https://img.aspxhome.com/file/2023/2/79642_0s.png)
sql server中通过查询分析器实现数据库的备份与恢复方法分享
2012-05-22 18:41:58
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2022-04-16 19:40:58
asp 取一个数的整数 但不是四舍五入,只要有小数,就取大于这个数的整数
2011-03-17 10:34:00
再读《你是一个职业的页面重构工作者吗?》
2009-02-11 12:22:00
python web框架Flask实现图形验证码及验证码的动态刷新实例
2021-01-09 15:35:53
超简单的Python HTTP服务
2023-01-22 06:19:15
一个导航的前端实现
2008-11-13 12:41:00
![](https://img.aspxhome.com/file/UploadPic/200811/13/step1-40s.png)
MooTools的Cookie类太“自作聪明”了
2008-11-13 12:59:00
python list等分并从等分的子集中随机选取一个数
2022-07-06 05:24:04
python实现网上购物系统
2021-06-12 16:32:26
String.indexOf 方法介绍
2013-06-01 20:22:27
Go语言string,int,int64 ,float之间类型转换方法
2023-06-28 15:20:30
经验总结:修改MySQL默认密码的具体步骤
2009-01-04 13:29:00
php基础教程 php内置函数实例教程
2023-11-14 18:28:45