LeetCode 探索初级算法-字符串:16 验证回文字符串-20200327

16 验证回文字符串-20200327

题目

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

示例

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

说明

本题中,我们将空字符串定义为有效的回文串。


注意事项

  1. 回文字符串就是顺着读,倒着读都是一样的。
  2. 不用考虑空格和逗号。

思路一

双指针方法可以的。一个从左向右,一个从右向左,遇到空格和逗号就pass。如果两个指针指向的字母一样就pass,否者就return False。

修改经历:

1. 没有考虑数字。。。(第一次提交)

  • 解答错误

2. 修改过后,提交成功,但是效果不好,很不好。应该是写了两次循环。如果一次循环能操作就好。(第二次提交)

  • 执行用时 :192 ms, 在所有 Python3 提交中击败了5.19%的用户
  • 内存消耗 :19.2 MB, 在所有 Python3 提交中击败了5.03%的用户

心得体会:

本以为自己写的代码比python自己带的要好用,事实并不是这样的。。。

最终代码展示:

class Solution:
    def isPalindrome(self, s: str) -> bool:
        k, ls = 0, []
        legal_char = [x for x in range(65, 91)] + [y for y in range(97, 123)] + [z for z in range(48, 58)]
        for k in s:
            if ord(k) in legal_char:
                ls.append(k.lower())
            else:
                pass
        i, j = 0, len(ls)-1
        while i < len(ls) and j > 0:
            if ls[i] != ls[j]:
                return False
            else:
                i += 1
                j -= 1
        return True

思路二

根据题解大神的答案,发现采用sting自带的函数去写,这样可能会快一点,但是思路差不多。

修改经历:

1. 一次成功。(第一次提交)

  • 执行用时 :52 ms, 在所有 Python3 提交中击败了71.56%的用户
  • 内存消耗 :13.8 MB, 在所有 Python3 提交中击败了40.93%的用户

心得体会:

这里要介绍一下字符串的几个函数,isalnum() 判断是不是数字或者字母,lower() / upper() 转为小写/大写。list 的切片规则 [start, stop, step]。

最终代码展示:

class Solution:
    def isPalindrome(self, s: str) -> bool:
        new_str = ''
        for it in s:
            if it.isalnum():
                new_str += it.lower()
            else:
                pass
        return bool(new_str[::-1]==new_str)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章