括號序列 自出水題

2022-04-06 19:37:33 字數 2102 閱讀 9341

首先我們先了解一下這一道水題:

【問題描述】

給你乙個只有小括號和中括號和大括號的括號序列,問該序列是否合法。

【輸入格式】

一行乙個括號序列。

【輸出格式】

如果合法,輸出ok,否則輸出wrong。

【樣例輸入】

[(])

【樣例輸出】

wrong

【資料範圍與規定】

對於的資料,序列長度不超過1000。

解析:

關於這種括號匹配的題,首先要想到的是通過 stack 來進行做,而關於 stack 本部落格之前講過,這道題便可以說是 stack 的乙個模板題...這裡介紹兩種做法...

方法一:  用陣列進行模擬棧,自己做乙個手動棧,時間上可能會比 stl庫中提供的棧會快一些...

1 #include2 #include3 

4 using namespace std;

5 6 char s[1005], z[1005];

7 8 int size;

9 10 int main()

21 else size--;

22 }

23 if (s[i] == ']')

28 else size--;

29 }

30 if (s[i] == '}')

35 else size--;

36 }

37 if (s[i] == '

41 }

42 if(size != 0) printf("wrong\n");

43 else printf("ok\n");

44

45 return 0;

46 }

stack by hand

方法二:  直接用stl中的棧:

1 #include2 #include3 #include4 

5 using namespace std;

6 7 char s[1005];

8 int l;

9 10 stack k;

11 12 int main()

22 else k.pop();

23 }

24 if (s[i] == ']')

29 else k.pop();

30 }

31 if (s[i] == '}')

36 else k.pop();

37 }

38 if (s[i] == '(' || s[i] == '

41 }

42 if (!k.empty()) printf("wrong\n");

43 else printf("ok\n");

44 return 0;

45 }

stack by stl

關於括號問題——一般都是關於棧的模板

最長合法括號序列 棧(括號題)

這是另一道處理合法括號序列的題目。我們應該提醒你,如果乙個括號序列插入 和 1 後,可以得到乙個正 確的數學表示式,那麼它被稱為 合法 的。例如,序列 和 是合法的,但 和 不是。給出乙個由 和 字元組成的字串。你要找出它最長的是合法括號序列的子串,也同樣要找出最長子串的個數。括號題容易想到棧,把左...

NOIP模擬題 括號序列

題目描述 課堂上,felix 剛剛學習了關於括號序列的知識。括號序列是乙個只由左括號 和右括號 構成的序列 進一步的,乙個合法的括號序列是指左括號和右括號能 夠 一一匹配的序列。如果用規範的語言說明,乙個合法的括號序列可以有以下三種形式 1 s 空串 s 是乙個合法的括號序列 2 s xy,其中 x...

演算法題 補全括號序列

大概意思就是 給出乙個中括號序列,在序列前後可以加中括號字元,補全它。當時沒想起來解決辦法,然後涼涼了,後來專門去搞了這道題,終於搞定 思路在注釋裡寫的比較詳細了,此處不再贅述 用了類似棧的思想 字串轉陣列 param str string 輸入的字串 return array 轉換之後的結果陣列 ...