21 括號匹配

2021-10-19 12:25:58 字數 1852 閱讀 2650

問題 j: 括號匹配

時間限制: 1 sec 記憶體限制: 128 mb

提交: 69 解決: 9

[提交] [狀態] [討論版]

題目描述

定義如下括號匹配序列:

1.空序列是匹配序列;

2.如果s是匹配序列,那麼(s),[s],和也是匹配序列;

3.如果a和b都是匹配序列,那麼ab也是匹配序列。

例如,下面的字串都是匹配序列:

(),,(()),(),(),()[()],}<>,(<>}),<<{}>>

而以下幾個則不是:

(,[,],)(,()),([(),<<,),<{}>)

序列中可能包含萬用字元,含義如下:

/表示任意1個左括號

#表示任意2個左括號

@表示任意4個左括號

?表示任意8個左括號

\表示任意1個右括號

*表示任意2個右括號

&表示任意4個右括號

!表示任意8個右括號

現在,給你一些由"("、")"、"["、"]"、""、"<"、">"和萬用字元構成的序列,你要做的,是判斷該序列是否為匹配序列。

輸入第一行:乙個正整數n,表示測試資料組數;

接下來n行:每行乙個括號序列(長度不超過l)。

輸出共n行:對於每乙個括號序列,判斷其是否匹配。

對於不匹配的序列,直接輸出false。

對於匹配的序列,輸出用單一空格隔開的3個資訊:

第乙個資訊為true

第二個資訊為括號的最大深度(層數)

第三個資訊為達到最大深度的次數

詳見樣例

樣例輸入

3@<>{})))>

([})

?\\\]

樣例輸出

true 5 2

false

true 8 1

提示對於第一組資料,@相當於<(((,是匹配的,括號的最大深度為5,該深度出現了2次。

對於第二組資料,[和}不匹配。

第三組資料想要說明的是,萬用字元間可以匹配。

[提交][狀態]

**:

#include

using

namespace std;

typedef

long

long ll;

void

solve()

}else

if(s[i]

==']')}

else

if(s[i]

=='}')}

else

if(s[i]

=='>')}

else

if(s[i]

=='\\')}

else

if(s[i]

=='*')}

if(!ok)

break;}

else

if(s[i]

=='&')}

if(!ok)

break;}

else

if(s[i]

=='!')}

if(!ok)

break;}

else

tmp=q.

size()

;if(tmp>res)res=tmp,time=1;

else

if(tmp==res) time++;}

if(ok&&q.

empty()

) cout<<

"true"

<<

" "<" "<不要忘了

else cout<<

"false"

<}int

main()

注意細節!!!

資料結構之棧(2 1)應用 括號匹配

編寫乙個演算法,判斷鍵盤輸入的表示式是否配對。假設括號只包含 1 所謂括號配對,就是 2 輸入的字串中,可能包含 也可能沒有 數字,及其他符號。3 每當掃瞄字串元素 現 需要進行括號匹配檢查。檢查方式為 看最近出現的 而用什麼儲存 呢?棧是選擇之一。那棧的儲存狀態是,要麼有 要麼為空。4 根據以上分...

列印匹配括號

開始抽空做一些演算法題,留下記錄作為菜鳥的成長見證吧。這道題來自於cracking the coding interview,要求列印n對括號的所有可能匹配。我採用遞迴來做,這樣編寫比較方便而且容易弄懂,但用迭代應該會效率快不少而且遞迴一定能轉換成迭代吧,以後有空研究下 如下 include std...

括號匹配(二)

時間限制 1000 ms 記憶體限制 65535 kb 難度 6 描述 給你乙個字串,裡面只包含 四種符號,請問你需要至少新增多少個括號才能使這些括號匹配起來。如 是匹配的 是匹配的 是不匹配的 是不匹配的 輸入第一行輸入乙個正整數n,表示測試資料組數 n 10 每組測試資料都只有一行,是乙個字串s...