leetcode 有效的括號(棧)

2021-10-10 02:02:53 字數 1798 閱讀 5670

有效的括號

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

有效字串需滿足:

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

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

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

示例 1:

輸入: 「()」

輸出: true

示例 2:

輸入: 「(){}」

輸出: true

示例 3:

輸入: 「(]」

輸出: false

示例 4:

輸入: 「([)]」

輸出: false

示例 5:

輸入: 「」

輸出: true

解題思路:

由於棧結構的特殊性,非常適合做對稱匹配類的題目。

現分析括號不匹配的幾種情況。(寫**之前要分析好有哪幾種不匹配的情況,如果動手之前不分析好,寫出的**也會有很多問題。)

第一種情況,字串裡左方向的括號多餘了 ,所以不匹配。

第二種情況,括號沒有多餘,但是 括號的型別沒有匹配上。

第三種情況,字串裡右方向的括號多餘了,所以不匹配。

現對上述三種情況加以分析:

第一種情況:已經遍歷完了字串,但是棧不為空,說明有相應的左括號沒有右括號來匹配,所以return false。

第二種情況:遍歷字串匹配的過程中,發現棧裡沒有要匹配的字元。所以return false。

第三種情況:遍歷字串匹配的過程中,棧已經為空了,沒有匹配的字元了,說明右括號沒有找到對應的左括號return false

技巧:在匹配左括號的時候,右括號先入棧,就只需要比較當前元素和棧頂相不相等就可以了,比左括號先入棧**實現要簡單的多了!

如何判斷左括號和右括號全部匹配:

就是字串遍歷完之後,棧是空的,就說明全都匹配了。

class

solution')

;else

if(s[i]

=='['

) st.

push

(']');

// 第三種情況:遍歷字串匹配的過程中,棧已經為空了,沒有匹配的字元了,說明右括號沒有找到對應的左括號 return false

// 第二種情況:遍歷字串匹配的過程中,發現棧裡沒有我們要匹配的字元。所以return false

else

if(st.

empty()

|| st.

top(

)!= s[i]

)return

false

;else st.

pop();

// st.top() 與 s[i]相等,棧彈出元素

}// 第一種情況:此時我們已經遍歷完了字串,但是棧不為空,說明有相應的左括號沒有右括號來匹配,所以return false,否則就return true

return st.

empty()

;}};

參考:

LeetCode,棧easy,有效的括號

有效的括號 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。簡單題可以讓人快樂 否則比較與棧頂的符號是否匹配 else else return false else if s i else retu...

LeetCode 20 (有效的括號) 棧

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

leetcode 20 有效的括號(棧)

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