leetcode上做的一道判斷括號字串是否有效的問題
阿新 • • 發佈:2019-02-11
問題:
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
The brackets must close in the correct order, "()"
and "()[]{}"
are all valid but "(]"
and "([)]"
are not.
解決思路:
建個數組,將左半邊括號入陣列,如果遇到右半邊括號,檢視是否和陣列的最後一個匹配,如果匹配,就繼續讀下一個;如果不匹配,則說明這個字串不合法。注意處理只有右半邊括號的字串!
因為最近需要練習java,所以這道題我用java實現。
程式碼:
package leetcode; import java.util.*; public class ValidParentheses { /** * author:liufan * 思想:用棧的思想。建個數組,將左半邊括號入陣列,如果遇到右半邊括號,檢視是否和陣列的最後一個匹配,如果匹配,就繼續讀下一個; * 如果不匹配,則說明這個字串不合法。注意處理一開始就是右半邊括號的字串! */ public static void main(String[] args) { // TODO Auto-generated method stub String s=""; System.out.print("輸入字串:"); Scanner in=new Scanner(System.in); s=in.next(); //輸入字串 boolean result=isValid1(s); System.out.print(result); } public static boolean isValid1(String s){ char[] str = s.toCharArray(); char[] stack = new char[s.length()]; int stack_end=-1,length=s.length(); int i=0,j=0; for(i=0;i<length;i++){ if(str[i]=='(' || str[i]=='[' || str[i]=='{'){ //如果是括號的左半邊,入陣列 stack_end++; stack[stack_end]=str[i]; } else if((str[i]==']' || str[i]==')' || str[i]=='}') && stack_end==-1){ //如果一開始就是右半邊 return false; } else { //是括號右半邊,判斷陣列內最後一個是否對應左半邊 if(str[i]==')' && stack[stack_end]=='('){ //是對應左半邊 stack_end--; } else if(str[i]==']' && stack[stack_end]=='['){ //是對應左半邊 stack_end--; } else if(str[i]=='}' && stack[stack_end]=='{'){ //是對應左半邊 stack_end--; } else{ //不是對應左半邊 return false; } } } if(stack_end!=-1){ //如果所有的判斷完,數組裡還有剩餘,說明沒有匹配完,則字串無效 return false; } else return true; } }