括號匹配問題(借助棧求解)

2021-10-09 17:51:03 字數 1137 閱讀 3670

給你乙個長度為 n 的由』(『和』)'組成的括號序列,你能找出這個序列中最長合法括號子串行麼?合法括號序列是指,在這個序列中,所有的左括號都有唯一的右括號匹配;所有的右括號都有唯一的左括號匹配。例如:((()))()()便是乙個長度為 10 的合法括號序列,而(()))( 則不是。

★資料輸入

輸入只有一行,是乙個長度為 n(1<=n<=10^6)的由』(『和』)'組成的括號序列。

★資料輸出

輸出兩行。第 1 行表示最長合法括號序列的長度。第 2 行表示最長合法括號序列的個數。

如果沒有合法括號序列輸出 0和 1。

輸入示例1

)((())))(()())

輸出示例162

輸入示例2

))(輸出示例201

#include

#include

#include

#define maxsize 1000000

typedef

struct lnode *list;

/* 建立乙個堆疊 */

struct lnode

;/* 入棧函式 */

bool push

(list l,

char ch)

/* 判斷棧是否為空 */

bool isempty

(list l)

/* 出棧函式 */

char

pop(list l)

/* 本程式中只有「(」入棧,「)」作為出棧的條件 */

intmain

(void

)else

if(ch==

')'&&

!isempty

(l))

if(xulie>max)

else

if(xulie == max)if(

isempty

(l))

//堆疊已空,把括號序列長度置 0

xulie =0;

//此時說明前面輸入的「(」已經全部匹配完,把xulie置0以記錄下乙個合法的括號序列}if

(max ==0)

else

return0;

}

括號匹配問題 棧

根據棧的先進後出特點 將遇到的左括號依次壓入棧中 遇到右括號時取出棧頂元素 退棧處理 比較棧頂元素和輸入的括號是否想匹配 注意 1.判斷的字串流的奇偶性 2.注意輸入的字元是否為所需的括號字元 3.考慮棧的棧頂和棧底是否溢位 4.棧在開始和結束時都應該是空的.所以匹配到最後還要判斷棧是否為空,若非空...

括號匹配問題(棧模擬)

在某個字串 長度不超過100 中有左括號 右括號和大小寫字母 規定 與常見的算數式子一樣 任何乙個左括號都從內到外與在它右邊且距離最近的右括號匹配。寫乙個程式,找到無法匹配的左括號和右括號,輸出原來字串,並在下一行標出不能匹配的括號。不能匹配的左括號用 標註,不能匹配的右括號用 標註.輸入包括多組資...

括號匹配問題 順序棧

思想 每讀入乙個括號 1 若是左括號,則直接入棧,等待相匹配的同類右括號。2 若是右括號,且與當前棧頂的左括號同型別,則二者匹配,將棧頂的左括號出棧,否則屬於不合法的情況。include include define true 1 define false 0 define stack size 5...