还是不能够全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)  
全部评论

相关推荐

11-04 14:10
东南大学 Java
_可乐多加冰_:去市公司包卖卡的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务