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)