1、 解题思路
1.首先将字母转换为统一格式
2.遍历字符串,如果是字母或数字,加入列表
3.将添加完的列表进行反转,然后与原列表比较,得出结果
官方的这个思路和我的一样,直接用字符串,比我的简洁。
class Solution:
def isPalindrome(self, s: str) -> bool:
letters = []
s = s.lower()
for i in s:
if i.isalpha() or i.isdigit():
letters.append(i)
reverse_letters = list(reversed(letters))
return reverse_letters == letters
class Solution:
def isPalindrome(self, s: str) -> bool:
new_s = "".join(ch.lower() for ch in s if ch.isalnum())
return new_s == new_s[::-1]
2、解题思路
这个和1思路是一样的,先处理字符串。不同的是使用双指针进行循环比较,就是首位和末位分别用一个指针表示,然后分别依次递增和递减,进行比较。
class Solution:
def isPalindrome(self, s: str) -> bool:
new_s = "".join(ch.lower() for ch in s if ch.isalnum())
left,right = 0, len(new_s)-1
while left < right:
if new_s[left] != new_s[right]:
return False
left,right = left+1, right-1
return True
3、解题思路
这种和思路2有相似之处,同样使用双指针,不同的是直接在原字符串上处理。所以此处需要让指针循环递增或递减,直到找到字母或数字,然后进行判断。
class Solution:
def isPalindrome(self, s: str) -> bool:
new_s = "".join(ch.lower() for ch in s if ch.isalnum())
left,right = 0, len(new_s)-1
while left < right:
while left < right and not new_s[left].isalnum():
left = left+1
while left < right and not new_s[right].isalnum():
right = right-1
if new_s[left].lower() != new_s[right].lower():
return False
left,right = left+1, right-1
return True
链接:https://leetcode-cn.com/problems/valid-palindrome/solution/125-yan-zheng-hui-wen-chuan-by-senlindu-h8xo/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。