LeetCode 680.驗證迴文字符串Ⅱ(python題解)

LeetCode 680.驗證迴文字符串Ⅱ(python題解)

1 題目

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

2 示例

示例 1:
輸入: “aba”
輸出: True

示例 2:
輸入: “abca”
輸出: True
解釋: 你可以刪除c字符

3 思路

用一左一右的雙指針,當左右指針的字符不相同時,若刪除當前左指針(或刪除右指針)的字符後的字符串是迴文字符串則返回True,否則返回Fasle。關於刪除左(右)指針後的判斷,可單獨定義一個方法。

4 題解

class Solution:
	def validPalindrome(self, s):
		l = 0
		r = len(s)-1
		while l < r:
			if s[l] != s[r]:
				return self.isPalindrome(s, l+1, r) or self.isPalindrome(s, l, r-1)
			l += 1
			r -= 1
		return True
	def isPalindrome(self, s, l, r):  # 判斷是否爲迴文字符串
		while l < r:
			if s[l] != s[r]:
				return False
			l += 1
			r -= 1
		return True

5 改進

由於python可直接通過 s == s[::-1] 來判斷是否爲迴文字符串,故可以改進以上代碼

class Solution:
	def validPalindrome(self, s):
		l = 0
		r = len(s)-1
		while l < r:
			if s[l] != s[r]:
				sl = s[:l] + s[l+1:] # 去掉s[l]後的字符串
				sr = s[:r] + s[r+1:] # 去掉s[r]後的字符串
				return sl == sl[::-1] or sr == sr[::-1]
			l += 1
			r -= 1
		return True

6 注意

學會在類中調用其他方法,不要遺漏while循環中變量的增減

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章