题目
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串。字母和数字都属于字母数字字符。给你一个字符串 s,如果它是回文串,返回 true ;否则,返回 false 。
例:
输入: "A man, a plan, a canal: Panama"
输出:true
解释:"amanaplanacanalpanama" 是回文串。
方法一:暴力解法
class Solution(object):
def isPalindrome(self, s):
letter = [chr(i) for i in range(97, 123)]
number = [str(i) for i in range(10)]
s = s.lower()
arr = []
for i in range(len(s)):
if s[i] in letter or s[i] in number:
arr.append(s[i])
left, right = 0, len(arr)-1
while left < right:
if arr[left] != arr[right]:
return False
left += 1
right -= 1
return True
方法二:API
class Solution:
def isPalindrome(self, s: str) -> bool:
sgood = "".join(ch.lower() for ch in s if ch.isalnum())
return sgood == sgood[::-1]
相关知识
isalnum:
str.isalnum()
检测字符串是否由字母和数字组成切片:
object[start:end:step]
start:切片的起始位置,如果没有值的话从头开始
end:切片的结束位置,但不包含end(前闭后开),如果没有值的话表示切割到结束为止.
step:步长,默认取值为1,如果步长为正数的情况表示从左往右,反正若为负数则表示从右往左.
参考
代码相关:https://leetcode.cn/problems/valid-palindrome/solution/yan-zheng-hui-wen-chuan-by-leetcode-solution/
切片:https://blog.csdn.net/Zombie_QP/article/details/125063501