快乐的LeetCode --- 125.验证回文串

本文详细解析了如何通过编程验证一个字符串是否为回文串,重点介绍了两种方法:一种是去除标点和空格后逐字符比较,另一种是利用列表存储字母和数字并比较反转后的列表是否相同。

题目描述:

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。("回文串"是一个正读和反读都一样的字符串)

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true

示例 2:

输入: "race a car"
输出: false

解题思路1:

  1. 去除字符串中的标点符号
  2. 去除字符串中的空格
  3. 根据回文串的定义,依次比较两边字符是否一致

代码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

  1. 首先将字符串s转换为小写,然后定义一个列表,其中只保存字母和数字。
  2. 判断 反转后的列表是否和原列表相等

代码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]

题目来源:
https://leetcode-cn.com/problems/valid-palindrome/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值