1. 程式人生 > >leetcode上做的一道判斷括號字串是否有效的問題

leetcode上做的一道判斷括號字串是否有效的問題

問題:

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;
	}
}