如何使用棧更好的解決括號匹配問題???

2021-10-05 08:28:09 字數 1344 閱讀 2882

給定乙個只包括 『(』,』)』,』』,』[』,』]』 的字串,判斷字串是否有效。

有效字串需滿足:

1.左括號必須用相同型別的右括號閉合。

2.左括號必須以正確的順序閉合。

!!!注意空字串可被認為是有效字串。

示例 1:

輸入: 「()」

輸出: true

示例2.

輸入: 「(]」

輸出: false

示例3:

輸入: 「([)]」

輸出: false

示例4:

輸入: 「」

輸出: true

1.呼叫map介面實現建立map例項放入(括號)鍵值對作為後序判定

2,建立乙個棧

3,遍歷字串,逐個取出字元

3.1遍歷過程中如果為左括號就入棧

3.2如果為右括號,就取出棧頂元素查表對比是否與右括號相同

4.遍歷結束,棧為空,且之前沒有返回false,就認為所有括號匹配

(具體流程也可參考**注釋)

public

static

boolean

isvalid

(string str)')

; map.

put(

'[',

']')

;//先建立乙個棧

stack

stack =

newstack

<

>()

;//迴圈遍歷每個字元

for(

int i =

0; i < str.

length()

; i++

)//判斷rec為右括號即取出棧頂元素

if(stack.

empty()

)char top = stack.

pop();

//判斷c是否為右括號,如果是就取出棧頂元素top與rec比較

if(map.

get(top)

== rec )

return

false;}

if(stack.

empty()

)return

false

;}

棧解決括號匹配問題

題目 假設乙個表示式中可以包含三種括號 小括號,中括號,大括號,且這三種括號可以任意次序巢狀使用,如 3 5 4 編寫判斷表示式括號是否匹配的程式。表示式為字串。解題思路 解決括號匹配問題我們要考慮的是優先順序,大家學過數學的都知道要想解決這類算式我們要做的就是去括號,去括號不能隨便去,要先去除最後...

用棧解決括號匹配問題

define crt secure no warnings 1 include include include typedef char datatype define capacity 100 底層空間的總大小 typedef struct stack stack 初始化 void stackin...

使用async await更好的解決非同步問題

async函式是generator的乙個語法糖,使用async函式實際上返回的是乙個promise物件。如下 async function fn 或者 const fn async 複製 在宣告函式的時候,前面加上關鍵字async即可。我們可以使用console.log列印出上邊宣告的函式fn,結果...