題目難度: Easy
題目描述:
給定一個(gè)字符串咐熙,驗(yàn)證它是否是回文串枕稀,只考慮字母和數(shù)字字符,可以忽略字母的大小寫旦万。
說明:本題中闹击,我們將空字符串定義為有效的回文串。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/valid-palindrome/
驗(yàn)證回文串的思路一般有兩種:
- 字符串反轉(zhuǎn)后和原串相等
- 使用兩個(gè)指針成艘,前后兩指針指向的元素相等
這一題特殊的地方在于只考慮字母和數(shù)字字符赏半,不考慮其他字符,如空格淆两,一些特殊字符 ¥ # 等断箫。所以可以考慮先將字符串中的數(shù)字、字母摘出來秋冰,組成新的字符串仲义,然后采用以上兩種方法判斷字符串是否是回文字符串。不過這種方法需要額外開辟空間剑勾,并非最優(yōu)解光坝。 另一種思路是采用兩個(gè)指針的方法,但是指針?biāo)冈厝绻亲帜富蜃址模瑒t不進(jìn)行比較盯另,而是直接將指針向前向后移動(dòng)。
Python 代碼實(shí)現(xiàn):
class Solution:
def isPalindrome(self, s: str) -> bool:
if not s:
return True
left, right = 0, len(s) - 1
while left < right:
while left<right and not s[left].isalnum():
left = left + 1
while left<right and not s[right].isalnum():
right = right - 1
if s[left].lower() != s[right].lower():
return False
left = left + 1
right = right - 1
return True