給你乙個長度為 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...