[Java]利用棧判斷括號是否完整配對
阿新 • • 發佈:2018-12-26
利用棧實現判斷字串中的括號是否都是配對的。
主要演算法是依次讀取字串中的每一個字元,如果是左括號則將左括號壓入棧中,如果是右括號則從棧中彈出最上面的字元,若兩者不是同種括號或棧內已經沒有字元就返回false,迴圈完成後返回true。
package com.example; /** * Created by XiaFF on 2014/11/18. * */ public class Parentheses { public static void main(String[] args){ String s="[()]{}{[()[]()]()}"; System.out.println(isComplete(s)); } public static boolean isComplete(String s){ Stack<String> left=new Stack<String>(); while (!s.isEmpty()){ //取字串首字母 String character=s.substring(0,1); //剩餘的字串 s=s.substring(1); if(character.equals("{")||character.equals("[")||character.equals("(")){ //如果是左括號,則壓入棧 left.push(character); }else if(character.equals(")")||character.equals("]")||character.equals("}")){ //首先檢查棧是否為空 if(left.isEmpty()) return false; //彈出最後的左括號 String leftChar=left.pop(); //檢查左右括號是否匹配 if(character.equals(")")){ if(!leftChar.equals("(")) return false; }else if(character.equals("]")){ if(!leftChar.equals("[")) return false; }else if(character.equals("}")){ if(!leftChar.equals("{")) return false; } } } //此時棧中不應該再有左括號 return left.isEmpty(); } }