简单
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true_ ;否则,返回 false _。
输入: s = “A man, a plan, a canal: Panama” 输出:true 解释:“amanaplanacanalpanama” 是回文串。
输入:s = “race a car” 输出:false 解释:“raceacar” 不是回文串。
输入:s = " " 输出:true 解释:在移除非字母数字字符之后,s 是一个空字符串 “” 。 由于空字符串正着反着读都一样,所以是回文串。
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 = 0
right = len(tmp) - 1
# 如果字符长度时奇数,不需要比较中间位置
# 如果字符长度时偶数,没有中间位置
# 所以使用<进行比较
while left < right:
if tmp[left] == tmp[right]:
left += 1
right -= 1
else:
return False
return True
if __name__ == '__main__':
s = "1A man, a plan, a canal: Panama1"
s = "raca a car"
# s = " "
so = Solution()
res = so.isPalindrome(s)
print(res)