演算法練習題1-括號序列
題目
給出一個僅包含字元’(’,’)’,’{’,’}’,’[‘和’]’,的字串,判斷給出的字串是否是合法的括號序列
括號必須以正確的順序關閉,"()“和”()[]{}“都是合法的括號序列,但”(]“和”([)]"不合法。
public class Solution {
/**
*
* @param s string字串
* @return bool布林型
*/
public boolean isValid (String s) {
/**
* 1、將所有字元儲存
* 2、遍歷所有字元,利用棧和編譯原理符號棧的原理
* (1)依次遍歷
* (2)如果遇到“)}]”中的符號,就和上一個比較,因為只有成對出現,切沒有交叉才為true
* (3)如果第一個是“)}]”中的符號,就直接返回false
* (4)如果遇到“({[”就繼續
* (5)如果匹配上了,就將這兩個符號全部出棧
*/
char[] s1 = s.toCharArray();
ArrayList fhList = new ArrayList<String>();
//利用arraylist儲存所有符號
for(int i = 0; i < s1.length; i++){
String k = s1[i]+"";
if("[".equals(k) || "]".equals(k) ||
"(".equals(k) || ")".equals(k) ||
"{".equals(k) || "}".equals(k)){
fhList.add(k);
}
}
//符號個數必須是偶數個
int fhlegth = fhList.size();
if(fhlegth % 2 == 1){
return false;
}
for(int i = 0; i < fhList.size(); i++){
//獲取當前位置符號
String last = (String) fhList.get(i);
//需要出棧的符號
String pop = "";
//遇到反方向的符號,切不是第一個時,就暫存上一個字元,用於和當前字元比較
if(")}]".contains(last) && i-1 >= 0){
pop = (String) fhList.get(i-1);
}else if(")}]".contains(last)){
return false;
}
//開始匹配,如果匹配上就“出棧”,並且長度漸少
if(")".equals(last)){
if(!"(".equals(pop) ){
return false;
}
fhList.remove(i);
fhList.remove(i-1);
i = i - 2;
}else if("]".equals(last) ){
if(!"[".equals(pop)){
return false;
}
fhList.remove(i);
fhList.remove(i-1);
i = i - 2;
}else if("}".equals(last)){
if(!"{".equals(pop)){
return false;
}
fhList.remove(i);
fhList.remove(i-1);
i = i - 2;
}
}
//沒有全部出棧,即沒有全部匹配
if(fhList.size() > 0){
return false;
}
return true;
}
public static void main(String[] args) {
String test = "[(){}]";
Solution solution = new Solution();
System.out.println(solution.isValid(test));
}
}
個人解法,不代表最優解,有想法可以一起交流!!!
相關文章
- 【題解】括號序列
- 牛客題霸 [括號序列] C++題解/答案C++
- 萌新練習寫程式碼的每日一練:括號生成
- 演算法題:判斷括號字串是否有效演算法字串
- 每日一題: 有效括號每日一題
- 演算法篇-字串-TeX括號演算法字串
- ACM 括號配對問題ACM
- [Go 演算法]20:有效括號(棧)Go演算法
- 理解正規表示式中的括號 (),方括號 [] 和大括號 {}
- 資料結構括號匹配問題資料結構
- ”回溯演算法“框架及練習題演算法框架
- 經典演算法題每日演練——最長公共子序列演算法
- 括號畫家
- 【棧】括號匹配
- (譯) javascript中的物件,方括號和演算法JavaScript物件演算法
- LeetCode 3: PairsOfParentheses (括號匹配問題)LeetCodeAI
- 括號匹配的檢驗問題(C++)C++
- P3215 括號修復 題解
- c++物件建立帶括號與無括號的區別C++物件
- JavaScript中圓括號()和方括號[]的一個特殊用法JavaScript
- python的學習(三)----中括號的使用Python
- P8765 [藍橋杯 2021 國 AB] 翻轉括號序列
- Shell 括號總結
- Swift之花括號Swift
- 最長有效括號
- Luogu P3059 Concurrently Balanced Strings G 題解 [ 紫 ] [ 線性 dp ] [ 雜湊 ] [ 括號序列 ]
- 力扣刷題Python筆記:括號生成力扣Python筆記
- 演算法練習演算法
- 【原創】WinImage 7.0 序列號演算法演算法
- 正則中括號點符號符號
- 讓我們一起啃演算法----有效的括號演算法
- 程式碼隨想錄演算法訓練營第47天 | 動態序列11:序列專題2演算法
- JSON 字串中的中括號和大括號區別詳解JSON字串
- JavaScript 函式呼叫時帶括號和不帶括號的區別JavaScript函式
- Matlab中的括號()[]{}Matlab
- 20. 有效的括號
- 新手練習:Python練習題目Python
- 【練習】銀行排號程式