Leetcode680. 驗證迴文字符串 Ⅱ(python,遞歸)

1. 題目

給定一個非空字符串 s,最多刪除一個字符。判斷是否能成爲迴文字符串。

示例 1:

輸入: "abca"
輸出: True
解釋: 你可以刪除c字符。

注意:

字符串只包含從 a-z 的小寫字母。字符串的最大長度是50000。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/valid-palindrome-ii
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

2. 題解

遞歸,用k記錄刪除元素的個數;
由於k最大爲1,每個元素最多遍歷2次,線性複雜度。
時間複雜度:O(n)
空間複雜度:O(1)

class Solution:
    def helper(self, s, k):
        if len(s) <= 1:
            return True
        if k < 0:
            return False
        start = 0
        end = len(s)-1
        res = True
        while True and start <= end:
            if s[start] == s[end]:
                start += 1
                end -= 1
            else:
                if k <= 0:
                    return False
                else:
                    res = self.helper(s[start:end],k-1) or self.helper(s[start+1:end+1],k-1)
                    return res
        return res

    def validPalindrome(self, s: str) -> bool:
        return self.helper(s,1) 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章