Python程序:删除两端相同字符后找到字符串的最小长度
假设我们有一个字符串s,其中只有三个字符'a'、'b'和'c'。我们将对字符串应用以下算法任意多次:
从s中选择一个非空前缀,其中前缀中的所有字符都相同。
从s中选择一个非空后缀,其中后缀中的所有字符都相同。
前缀和后缀不相交。
前缀和后缀中的字符必须相同。
从s中删除前缀和后缀。
最后,我们必须找到执行上述操作任意次数(可能为零次)后s的最小长度。
因此,如果输入类似于s = "aabccabba",则输出将为3,因为我们首先可以选择prefix = "aa"和suffix = "a",这样删除后的字符串为"bccabb",然后选择prefix = "b"和suffix "bb",这样删除后的字符串为"cca",其长度为3。
为了解决这个问题,我们将遵循以下步骤:
s := 用s创建一个队列
当s的大小 > 1 且s[0] 等于s的最后一个元素时,执行以下操作:
chk := s[0]
当s不为空且s[0] 相同,执行以下操作:
从s中删除左端元素
当s不为空且s的最后一个元素与chk相同,执行以下操作:
从s中删除右端元素
返回s的大小
示例
让我们看看下面的实现以更好地理解:
from collections import deque def solve(s): s = deque(s) while len(s) > 1 and s[0] == s[-1]: chk = s[0] while s and s[0] == chk: s.popleft() while s and s[-1] == chk: s.pop() return len(s) s = "aabccabba" print(solve(s))
输入
"aabccabba"
输出
3
广告