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)