Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
Note: For the purpose of this problem, we define empty string as valid palindrome.
Example 1:
Input: "A man, a plan, a canal: Panama" Output: true
Example 2:
Input: "race a car" Output: false 思路
从例子中可以看出,在进行对比的时候会遇到非字母和数字的字符,这个和之前做的回文判断很相似,只不过这里需要对当前位置的异常情况进行判断和处理。就是当前字符如果是". : ,"等等时,需要将下标移动到下一位在进行判断。在python中字符串有一个方法就是isalnum()用来判断当前字符是否是字母和数字。其他的和之前做的回文判断都一样。时间复杂度为O(n),空间复杂度为O(1)。解决代码
1 class Solution(object): 2 def isPalindrome(self, s): 3 """ 4 :type s: str 5 :rtype: bool 6 """ 7 if not s or len(s) == 1: # 空或者只有一个时直接返回结果 8 return True 9 start, end = 0, len(s) -1 # 首尾指针 10 while start < end: 11 while start < end and not s[start].isalnum(): # 判断当前字符是否是字符或者数字 12 start += 1 13 while end > start and not s[end].isalnum(): # 同上 14 end -= 1 15 16 if s[start].lower() != s[end].lower(): # 如果当前不相等,直接返回结果 17 return False 18 start += 1 19 end -= 1 20 return True # 遍历完毕,说明是回文。返回结果。
原文地址:https://www.cnblogs.com/GoodRnne/p/10908344.html
时间: 2024-11-10 07:35:14