有效的括號
給定乙個只包括 『(』,』)』,』』,』[』,』]』 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
示例 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 輸入 輸...