自定義資料結構(棧 佇列) 最長括號匹配

2021-10-10 14:05:57 字數 1566 閱讀 5270

第三題 最長括號匹配

滿足如下條件的字串稱為括號匹配的字串: 1. 空字串是括號匹配的字串。 2. 若a是括號匹配的串,則(a)、[a]是括號匹配的字串。 3. 若a、b是括號匹配的字串,則ab也是括號匹配的字串。 例如:()、、()、()()都是括號匹配的字串,而][、[(])則不是。 現在對乙個由「(」、「)」、「[」、「]」括號組成的字串,求出其中最長的括號匹配子串。 字串a的子串是指由a中連續若干個字元組成的字串。 例如,『a』, 『b』, 『c』, 『abc』, 『cab』, 'abcabc』都是abcabc的子串。空串是任何字串的子串。

輸入一行,為乙個僅由「(」、「)」、「[」、「]」組成的非空字串。

輸出一行,乙個數字,表示輸入字串中最長括號匹配子串的長度。

輸入樣例1

([(][()]]()

輸出樣例1

4輸入樣例2

())輸出樣例2

題中的重點為連續若干個字元,而並非全部的匹配對。

a=

input()

b=x=

c=[0for j in

range

(len

(a))

]#建立乙個目前都為0的列表,如果配對的符號就變成1

for i in

range

(len

(a))

:if a[i]

=='('

or a[i]

=='['

or a[i]

==''

:if b:

#如果b中不為空

d=b[

len(b)-1

]#調取最後乙個左括號

if a[i]

==')'

and d==

'('or a[i]

==']'

and d==

'['or a[i]

=='}'

and d==

'{':

b.pop(

)#配對以後就讓已經配對了的出去,再看前乙個沒辦法配對的

n=ic[n]=1

c[x[

len(x)-1

]]=1

x.pop(

)#因為b中已經出去了,所以x中元素也要彈出

else

:#如果b中為空

b.clear(

)#如果左括號右括號不符合就都刪除,因已經不可能有符合的情況

x.clear()p=

0q=0for i in c:

if i==1:

p=p+

1else

:#如果i不等於1,也就是沒有配對的情況下

if p>q:

q=p#p用來計數,q用來記錄最大的p

p=0#不是總數,而是連續的個數

else

: p=

0if qprint

(p)else

:print

(q)

自定義資料結構(棧 佇列) 括號匹配

第二題 括號匹配 滿足如下條件的字串稱為括號匹配的字串 1.空字串是括號匹配的字串。2.若a是括號匹配的串,則 a a 是括號匹配的字串。3.若a b是括號匹配的字串,則ab也是括號匹配的字串。例如 都是括號匹配的字串,而 則不是。現在對於輸入的字串,判斷它是否是括號匹配的字串。輸入一行,為乙個僅由...

資料結構 自定義佇列

用鍊錶建立佇列 public class linkqueueimplements queue public node e e public node override public string tostring private node head private node tail private...

scala資料結構 二 自定義迴圈佇列

佇列是乙個有序列表,可以用陣列或鍊錶實現,先進先出原則,即 先存入佇列的資料,要先取出。後存入的要後取出 迴圈佇列需要3個引數,head,tail,count 1.在佇列初始化的時候,head以及tail都為0 2.count用來記錄佇列中元素的個數 package com.zyd import s...