16 驗證迴文字符串-20200327
題目
給定一個字符串,驗證它是否是迴文串,只考慮字母和數字字符,可以忽略字母的大小寫。
示例
輸入: "A man, a plan, a canal: Panama"
輸出: true
說明
本題中,我們將空字符串定義爲有效的迴文串。
注意事項
- 迴文字符串就是順着讀,倒着讀都是一樣的。
- 不用考慮空格和逗號。
思路一
雙指針方法可以的。一個從左向右,一個從右向左,遇到空格和逗號就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)