LeetCode 125. 验证回文串
天津科技大学第六届科技文化节算法设计大赛第3题
难度:简单
题目:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
解释:“amanaplanacanalpanama” 是回文串
示例 2:
输入: “race a car”
输出: false
解释:“raceacar” 不是回文串
提示:
1 <= s.length <= 2 * 105
字符串 s 由 ASCII 字符组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-palindrome
**
解题思路:
-
解法一:
很显然本题可以使用栈来解决,即先构建一个栈,找到字符串的中间位置,从头开始进栈,到达中间出栈,将出栈元素与后续元素一一对比,这里不再赘述。 -
解法二:
在Python里可以先将字母统一化成大写或小写,再将字母依次放入一空列表中,从两端开始比较,alist[i]和alist[-i-1]比较,相等则继续,不等则直接返回False
源代码
def isPalindrome(self, s):
alist=[]
if len(s)==1 or len(s)==0:
return True
for i in s:
if 'A'<=i<='Z' or 'a'<=i<='z':
i=i.lower()
alist.append(i)
if '0'<=i<='9':
alist.append(i)
for i in range(0,int((len(alist)-1)/2)+1):
if alist[i]!=alist[(-1)*i-1]:
return False
return True
运行结果