leetcode 680(Python 3)

本文探讨了回文串判定的两种方法:一种是朴素的逐字符删除法,时间复杂度过高;另一种是更高效的算法,通过比较字符串两端字符来快速判断是否为回文串或在删除一个字符后能成为回文串。

题目是,给定一个字符,两种情况返回true

1.本身就是回文串(palindrome)

2.删除任意一个字符后,这个串成为回文串。

 

1.朴素方法:

轮着删字符,

time limit exceeded

class Solution:
    def validPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        for i in range(len(s)):
            t="".join([s[:i],s[i+1:]])
            if t==t[::-1]: return True
        return False

2.聪明方法

稍微懂点脑子,就知道,如果a是回文串,那么a[i]==a[len(a)-i-1],如果不相等,由题意只能删掉一个字符,那么要么是把i位置上的字符删掉后是回文串,要么把len(a)-i-1位置上的字符删掉后就是回文串。

 

那么思路就是,先判断它本身是不是回文串,然从头判别,i和len(s)-1-i,相等那么i就再往里走,可以缩小判别范围。

额,好像讲得不是很清楚。代码很简单…………

class Solution(object):
    def validPalindrome(self, s):
        if s==s[::-1]:return True
        
        for i in range(len(s)-1):
            if s[i] != s[len(s)-i-1]
                return s[i+1:len(s)-i]==s[i+1:len(s)-i][::-1] or s[i:~i]==s[i:~i][::-1]

 

我就是熟悉一下Python的风格吧……

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值