例題1 合法的括號串(內含stack總結)

2021-09-27 02:02:48 字數 1679 閱讀 8367

乙個合法的括號串,是指只包含括號的串,如果滿足如下條件:

(1)<> () {} 這四對括號是合法的;

(2)如果r是合法括號串,則 ® [r] 也是;

(3)如果r,s是合法括號串,則rs也是;

所以<<>> , [<>{}(())],[()]是合法的括號串,而)(,[( ])就不是。

輸入第一行正整數t (10 ≤ n ≤ 100),表示有多少組測試資料。後面有t行,每行乙個只包含8種括號符號的括號串。40%的括號串的長度l 2 ≤ l≤ 20;30%的括號串的長度l 2 ≤ l≤ 200;20%的括號串的長度l 2 ≤ l≤ 2000;10%的括號串的長度l 2 ≤ l≤ 20000;

##【輸出形式】對於每組測試資料,如果括號串是合法的,輸出「yes」(輸出沒有引號)佔一行,否則,輸出「no」(輸出沒有引號)佔一行。

6<<>>

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

[()]

[(])

}else if(str[i]=='}')else

}else if(str[i]==']')else

}else if(str[i]==')')else

}} if(i==len&&flag&&ch.empty()) cout<

一、stack 棧

stack依舊是stl中的容器,重要的是它可以實現先進後出的功能,下面介紹一些他的功能。

1.標頭檔案 :#include < stack>

2.stack的定義: stack < typename> name;

<>中是棧中的變數型別,例如:int char······可任意基本資料型別或容器。 name是定義的棧名。

3.stack中的元素訪問

stack本身是一種先進後出的資料結構,所以不能像vector一樣用下標訪問,它只能用top()訪問棧頂元素。

例如:

#include #include using namespace std;

int main(){

stackch;

ch.push('a');

ch.push('b');

ch.push('c');

cout<4.stack函式

(1)push(x)

向棧推頂加入新元素,可以理解為加入迭代器為0的元素。

(2)pop(x)

棧頂元素出棧,用法與push(x)類似,可以理解為刪除棧頂元素。

(3)top()

訪問棧頂元素,返回typename型的元素。

(4)empty()

返回bool型變數,檢測棧是否為空,是空的返回true,否則返回false。

例如:#include #include using namespace std;

返回int型變數,代表棧中元素的個數。

(6)search()

尋找目標第乙個出現的位置距離棧頂的距離,不存在的話返回值為-1。

合法的括號串(C 實訓題,棧)

問題描述 乙個合法的括號串,是指只包含括號的串,如果滿足如下條件 1 這四對括號是合法的 2 如果r是合法括號串,則 r 也是 3 如果r,s是合法括號串,則rs也是 所以 是合法的括號串,而 就不是。輸入形式 輸入第一行正整數t 10 n 100 表示有多少組測試資料。後面有t行,每行乙個只包含8...

LeetCode 1 檢查括號出現的合法性

題目 檢查字串中 的合法性,即是否成對出現 eg,如出現 為合法,出現 為不合法 如下 class a object def isvalid self,s stack paren map for c in s if c not in paren map 如果不是右括號,即是左括號 elif not ...

資料結構之棧的應用(判斷字串中括號的合法性)

需求 判斷乙個字串中的括號是否成對,是否合法?const str1 3223 2 2 2 const str2 22 12 sf1 sdfs 步驟 1.引入棧結構的建構函式 const stack require stack const str1 3223 2 2 2 const str2 22 1...