Java括號匹配舉例詳解
一、題目描述
給定一個(gè)只包括 '(',')','{','}','[',']' 的字符串 s ,判斷字符串是否有效。
有效字符串需滿足:
- 左括號必須用相同類型的右括號閉合。
- 左括號必須以正確的順序閉合。
- 每個(gè)右括號都有一個(gè)對應(yīng)的相同類型的左括號。
示例:
輸入:s = "()"
輸出:true
輸入:s = "(]"
輸出:false
二、題解
思路分析:
我們可以使用棧來解決這個(gè)問題:
遍歷字符串,如果是左括號,就將其入棧;
如果是右括號,就將棧頂元素彈出,判斷是否是與其匹配的左括號,
若棧中無元素可以彈出,則無能與該右括號匹配的左括號,返回false,
若不是與其匹配的左括號,返回false,
若是與其匹配的左括號,則繼續(xù)遍歷下一個(gè)字符。
當(dāng)循環(huán)結(jié)束時(shí),判斷棧是否為空,
若棧不為空,則表明還有未匹配的左括號,返回false,
若棧為空,則表示所有的左括號都與相同類型的右括號匹配,返回true

代碼實(shí)現(xiàn):
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
//判斷是否是左括號
char ch = s.charAt(i);
if(ch == '(' || ch == '[' || ch == '{'){
stack.push(ch);
}else {
//右括號,出棧
//無左括號能夠匹配,返回false
if(stack.empty()){
return false;
}
char ch2 = stack.pop();
if((ch2 == '(' && ch == ')') || (ch2 == '[' && ch == ']') || (ch2 == '{' && ch == '}')){
}else {
return false;
}
}
}
return stack.empty();
}
}題目來自:
總結(jié)
到此這篇關(guān)于Java括號匹配的文章就介紹到這了,更多相關(guān)Java括號匹配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis接口Mapper內(nèi)的方法為啥不能重載嗎
這篇文章主要介紹了Mybatis接口Mapper內(nèi)的方法為啥不能重載嗎,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Java中隊(duì)列Queue和Deque的區(qū)別與代碼實(shí)例
學(xué)過數(shù)據(jù)結(jié)構(gòu)的,一定對隊(duì)列不陌生,java也實(shí)現(xiàn)了隊(duì)列,下面這篇文章主要給大家介紹了關(guān)于Java中隊(duì)列Queue和Deque區(qū)別的相關(guān)資料,需要的朋友可以參考下2021-08-08
詳解Java Callable接口實(shí)現(xiàn)多線程的方式
這篇文章主要介紹了詳解Java Callable接口實(shí)現(xiàn)多線程的方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
java警告:源發(fā)行版17 需要目標(biāo)發(fā)行版17問題及解決
文章介紹了如何解決項(xiàng)目JDK版本不一致的問題,包括修改Project Structure、Modules、Dependencies和Settings中的JDK版本,以及在pom.xml中指定JDK源版本2024-11-11
Java postgresql數(shù)組字段類型處理方法詳解
這篇文章主要介紹了Java postgresql數(shù)組字段類型處理方法,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10

