"""
题目:给定一个字符串传,请判断如果最多从字符串中删除一个字符能不能得到一个回文字符串。
例如,如果输入字符串’ABCA‘,由于删除字符’B'或者‘C'就能得到一个回文字符串,因此输出为True
解题思路:该题与第18题“有效的回文”类似,不同之处在于如果出现P1指针的值于P2指针的值不相同的情况,要进行尝试。
首先尝试P1侧删除一个字符能否形成回文,如果不行,则P1侧要恢复刚才删除的字符
然后尝试P2侧删除一个字符能否形成回文,如果不行,则可以return False了。
与作者不同的是,我在处理时,如果发现两头的字符相同,则直接删除两头的元素,这样就能够不断的缩短字符串,
这样一能方便自己调试,二能减少is_mirror()函数的运行时间。
"""
import re
def is_mirror(new_s):
p1 = 0
p2 = len(new_s)-1
while p1 != p2:
if new_s[p1] != new_s[p2]:
return False
p1 += 1
p2 -= 1
return True
def one_chance_is_mirror(s):
pattern = re.compile('[a-zA-Z0-9]')
new_s = pattern.findall(s.upper())
if is_mirror(new_s):
return True
else:
while len(new_s) != 0:
if new_s[0] == new_s[-1]:
new_s.pop(0)
new_s.pop(-1)
else:
left = new_s.pop(0)
if is_mirror(new_s):
return True
else:
new_s.insert(0, left)
right = new_s.pop(-1)
if is_mirror(new_s):
return True
return False
s = 'Was it a cat I saw ?'
s1 = 'Was it a cats I saw ?'
s2 = 'Was it a catss I saw ?'
s3 = 'abca'
print(one_chance_is_mirror(s))
print(one_chance_is_mirror(s1))
print(one_chance_is_mirror(s2))
print(one_chance_is_mirror(s3))
《剑指offer》面试题19:最多删除一个字符得到回文
最新推荐文章于 2024-01-04 10:00:00 发布