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,验证,回文串
0
投稿

猜你喜欢

  • Laravel框架路由管理简单示例

    2023-11-14 13:37:26
  • 详解Python如何使用Netmiko进行文件传输

    2021-06-20 19:49:17
  • 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
  • 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
  • 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
  • asp之家 网络编程 m.aspxhome.com