【LeetCode每天一题】 Valid Palindrome(有效的回文)

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