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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章