20 有效的括號(括號匹配 棧)

2021-10-20 00:17:27 字數 1351 閱讀 2979

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

有效字串需滿足:

左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。

示例 1:

輸入:s = 「()」

輸出:true

示例 2:

輸入:s = 「(){}」

輸出:true

示例 3:

輸入:s = 「(]」

輸出:false

示例 4:

輸入:s = 「([)]」

輸出:false

示例 5:

輸入:s = 「」

輸出:true

首先,若想要給的字串中的括號都是有效的,字串 s 的長度必須為偶數,若為奇數一定不會匹配,返回false。

棧(先進後出)

遍歷字串 s,每當遇到左括號時,就將其對應的右括號壓棧。當遇到右括號時,將其與棧頂元素進行比較(因為,若想乙個括號能夠匹配,其左括號一定是在右括號的左邊才有可能匹配,而當遇見第乙個右括號時,只有距離它最近的乙個未匹配過的左括號才可能與它匹配(也就是比較它和最後乙個入棧的右括號是否相同))。

(1) 每當遇見右括號且棧頂元素不同時,返回false。

(2) 當遇到右括號時,棧是空的(),返回false。

(3) 字串 s 全部遍歷完成後,若棧中還有剩餘的元素,則說明未完全匹配,返回false。

class

solution

char

c = s.

tochararray()

;for

(int i=

0;i)else

if(c[i]

=='['

)else

if(c[i]

=='');

}else

if(stack.

isempty()

|| c[i]

!= stack.

pop())

}//當全部匹配結束後,棧中仍有元素則返回falseif(

!stack.

isempty()

)return

true;}

}

時間複雜度:遍歷了一次字串長度為 n,o(n)

空間複雜度:定義了乙個棧和乙個字元型陣列,長度均為 n,o(n + n) = o(2n) = o(n)(常數不考慮在內)

20 有效的括號(棧)

判斷括號是否匹配,思路是 1 需要乙個輔助資料結構棧,將字串從第乙個字元開始逐個遍歷,如果該字元是左括號,如 則判斷該字元是否與棧頂的括號匹配。如果匹配,進入下一輪迴圈,即判斷下乙個字元。如果不匹配,直接退出函式,返回false,即無效括號。3 如果字串中每乙個字元都遍歷完了,最後看棧是否為空,如果...

有效括號匹配

給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...

20 有效括號

1.題目描述 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。2.示例 輸入 輸出 true輸入 輸出 false3.思路 可以採用棧來解決,第一步 判斷棧是否空,為空則進乙個括號,若不為空,則判斷當前括號和棧頂元素是否匹配,不...