1、題目
撰寫一個 Stack 的用例 Parentheses,從標準輸入中讀取一個文本流并使用堆疊判定其中的括號是否配對完整,例如,對于 [()]{}{()()} 程式應該列印 true,對于 [(]) 則列印 false,
2、決議
利用堆疊的特性,左括號全部入堆疊,遇到右括號,馬上出堆疊第一個元素,如果出堆疊元素和右括號匹配,則表示是一個完整的括號對,否則之間回傳false,
額外需要注意的兩個點:
- 右括號實際數量超標,類似于這種:[()]],對于這種case,回圈遇到右括號時候,判斷堆疊是否為空,
- 左括號實際數量超標,類似于這種:[[()],對于這種case,整體回圈完畢后,判斷堆疊是否為空,
3、程式
package kb.algorithm;
public class Parentheses {
public static void main(String[] args) {
String s = "[[[[[]]]";
System.out.println(isMatched(s));
}
public static boolean isMatched(String s) {
Stack<Character> items = new Stack<>();
for (int i = 0; i < s.length(); i++) {
Character item = s.charAt(i);
if (item == '(' || item == '{' || item == '[') {
items.push(item);
}
if (item == ')') {
if (items.empty()) {
return false;
}
Character pop = items.pop();
if (pop != '(') {
return false;
}
}
if (item == '}') {
if (items.empty()) {
return false;
}
Character pop = items.pop();
if (pop != '{') {
return false;
}
}
if (item == ']') {
if (items.empty()) {
return false;
}
Character pop = items.pop();
if (pop != '[') {
return false;
}
}
}
if (items.empty()) {
return true;
} else {
return false;
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/282536.html
標籤:其他
