还是不能够全case通过,不知道原因。。
将该问题分析为找到输入的括号深度的一个子序列,使得该子序列长度与需要生成的括号深度列表序列相等,且每一个对应项都是该子序列的值大于生成序列的值。
举例:
如输入括号字符串为"(()()(()))",则该输入字符串的括号深度列表为[2,2,3]
若需要生成的括号字符串为"(()(()))",生成字符串的括号深度列表为[2,3],则存在输入子串2,3每一项都大于需要生成的序列列表,输出possible。
若需要生成的括号字符串为"((())())",生成字符串的括号深度列表为[3,2],则不存在子串满足条件。
def get_string_depth(s):
depth_list = []
depth = 0
pair = False
for i in range(len(s)):
if s[i] == '(':
depth += 1
pair = False
elif s[i] == ')':
if pair == False:
depth_list.append(depth)
pair = True
depth -= 1
else:
depth -= 1
return depth_list
def compare(s,t):
s_depth = get_string_depth(s)
t_depth = get_string_depth(t)
if len(t_depth)>len(s_depth): #如果生成的括号对数目大于输入的括号对数目,则不能生成
print('Impossible')
elif len(t_depth) == 1:
if t_depth[0] > max(s_depth):
print('Impossible')
else:
print('Possible')
else: #若存在一个s的子序列每一个数都大于t则可以生成
s_index = 0
t_index = 0
while s_index<len(s_depth)-1 and t_index < len(t_depth)-1 : #遍历生成序列
if s_depth[s_index]>=t_depth[t_index]:
s_index += 1
t_index += 1
else:
s_index += 1
if t_index == len(t_depth)-1:
print('Possible')
else:
print('Impossible')
if __name__ == '__main__':
s = input()
t = input()
compare(s,t)