验证回文串

题目

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true

示例 2:

输入: "race a car"
输出: false

解题思路

我的思路 答案(一)
弄出一个有效的字符集,也就是包含所有的字母和数字;然后弄2个游标从整个字符串左边和右边依次移动一格,如果遇到不是有效集合的元素,就再移动一步。
在每次双向移动的过程中,判断指向的两个元素是否相等,如果不相等,那么就返回False。

别人思路 答案(二)
回文字符串,可以用到字符串反转的方法也就是str = str[::-1];
然后,判断是否是数字和字母也有一个方法str.isalnum()
因此,先将所有元素转换成小写,然后通过这个方法,将原始的字符串变成只包含字母和数字的,最后判断原字符串和反转字符串是否相等即可。

答案(一)

class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        if s == '':
            return True
        data_set = 'abcdefghijklmnopqrstuvwxyz0123456789'
        s = s.lower()
        index_s = 0
        index_e = len(s) - 1
        while index_s < index_e:
            while index_s < index_e:
                if s[index_s] not in data_set:
                    index_s += 1
                else:
                    break
            while index_s < index_e:
                if s[index_e] not in data_set:
                    index_e -= 1
                else:
                    break
            if index_s == index_e - 1:
                if s[index_s] not in data_set or s[index_e] not in data_set:
                    return True
                else:
                    if s[index_s] == s[index_e]:
                        return True
                    else:
                        return False
            if index_s < index_e and s[index_s] != s[index_e]:
                return False
            else:
                index_s += 1
                index_e -= 1

        return True

答案(二)

class Solution:
    def isPalindrome(self, s: str) -> bool:
        if not s:
            return True
        s = s.lower()
        s = [s[i] for i in range(len(s)) if s[i].isalnum()]
        return s==s[::-1]

你可能感兴趣的:(验证回文串)