当前位置:首页 > 编程笔记 > 正文
已解决

每天一道算法题:125. 验证回文串

来自网友在路上 162862提问 提问时间:2023-11-07 04:43:46阅读次数: 62

最佳答案 问答题库628位专家为你答疑解惑

难度

简单

题目

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true_ ;否则,返回 false _。

示例 1:

输入: s = “A man, a plan, a canal: Panama” 输出:true 解释:“amanaplanacanalpanama” 是回文串。

示例 2:

输入:s = “race a car” 输出:false 解释:“raceacar” 不是回文串。

示例 3:

输入:s = " " 输出:true 解释:在移除非字母数字字符之后,s 是一个空字符串 “” 。 由于空字符串正着反着读都一样,所以是回文串。

提示:

  • 1 <= s.length <= 2 * 105
  • s 仅由可打印的 ASCII 字符组成

思路

1、将所有大写字符转换为小写字符,再移除所有非字母数字字符
2、使用双指针,left 指向字符串最左边,right 指向最右端
3、判断 left 和 right 所指的值是否相同,如果相同 left 向右移动一位,right 向左移动一位,直到 left 和 right 相遇,则字符串就是回文串,如果没有相遇字符串就不是回文串。

代码

class Solution:def isPalindrome(self, s: str) -> bool:# 去掉非字母数字字符tmp = [x.lower() for x in s if x.isalnum()]left = 0right = len(tmp) - 1# 如果字符长度时奇数,不需要比较中间位置# 如果字符长度时偶数,没有中间位置# 所以使用<进行比较while left < right:if tmp[left] == tmp[right]:left += 1right -= 1else:return Falsereturn Trueif __name__ == '__main__':s = "1A man, a plan, a canal: Panama1"s = "raca a car"# s = " "so = Solution()res = so.isPalindrome(s)print(res)
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"每天一道算法题:125. 验证回文串":http://eshow365.cn/6-34223-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!