题目描述:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。("回文串"是一个正读和反读都一样的字符串)
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
解题思路1:
- 去除字符串中的标点符号
- 去除字符串中的空格
- 根据回文串的定义,依次比较两边字符是否一致
代码1:
import string
class Solution(object):
def isPalindrome(self, s):
s = ''.join(c for c in s if c not in string.punctuation) # 去除标点符号
if len(s) <= 1: # ""、" " 、"."、 "a."均为true
return True
s = s.lower().replace(' ', '') # 大写变小写以及去除空格
number = 0
for i in range(len(s)//2):
if s[i] == s[len(s)-i-1]:
number += 1
if number == len(s)//2:
return True
return False
s = Solution()
str = "A man, a plan, a canal: Panama"
print(s.isPalindrome(str))
解题思路2:
来自: minningl
- 首先将字符串s转换为小写,然后定义一个列表,其中只保存字母和数字。
- 判断 反转后的列表是否和原列表相等
代码2:
class Solution(object):
def isPalindrome(self, s):
s = s.lower()
ls = []
for item in s:
if item.isdigit() or item.isalpha():
ls.append(item)
return ls == ls[::-1]
本文详细解析了如何通过编程验证一个字符串是否为回文串,重点介绍了两种方法:一种是去除标点和空格后逐字符比较,另一种是利用列表存储字母和数字并比较反转后的列表是否相同。
769

被折叠的 条评论
为什么被折叠?



