leetcode 680. 验证回文字符串 Ⅱ(python)

一、问题描述

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。

示例 1:

输入: "aba"
输出: True

示例 2:

输入: "abca"
输出: True
解释: 你可以删除c字符。

注意:

  1. 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。

二、代码和思路

1.首先一个长为n的s,要想验证最多删一个是回文串,那必须要左边跟右边要顺序相等(s+1)//2+1次

2.先确定第一个不相等时左边的位置i,这时如果还可以是符合题意的话有两种情况s[i]==s[n-1-i-1]或者s[i+1]==s[n-1-i],如果都不符合则return False

3.如果符合其中一个,则继续左右比下去,每比一次则i向后移一位

4.最后查看i是否等于(s+1)//2+1  相等就return True,否则返回False

class Solution(object):
    def validPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        n=len(s)
        cmp_time=(n+1)//2-1
        i=0
        while i<cmp_time and s[i]==s[n-1-i]:
            i += 1
        if i==cmp_time:return True
        if s[i]==s[n-1-i-1]:
            while i<cmp_time and s[i]==s[n-1-i-1]:
                i += 1
        if s[i+1]==s[n-1-i]:
            while i<cmp_time and s[i+1]==s[n-1-i]:
                i += 1
        if i==cmp_time:return True
        return False

猜你喜欢

转载自blog.csdn.net/weixin_40449300/article/details/81148765
今日推荐