问题描述:
对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。给定一个字符串 A 和它的长度 n ,请返回一个 bool 值代表它是否为一个合法的括号串。
测试样例:
" ( ( ) ( ) ) " , 6返回: true
" ( ) a ( ) ( ) " , 7返回: false
分析:
利用栈来解决这个问题,如果是左括号那就直接进栈,如果是右括号需要考虑以下几个问题:
1. 遍历字符串的过程中,栈是否是空的?
如果栈为空,那么就直接返回 false ,否则就让栈顶元素出栈。
2. 当遍历字符串后还需要再次判断栈是否为空,此时判断是为了看栈中是否还有左括号没有被匹配。
import java.util.*;
public class Parenthesis {
public boolean chkParenthesis(String A, int n) {
Stack<Character> stack = new Stack<>();
for(int i = 0;i<A.length();i++){
if(A.charAt(i) == '(' ){
stack.push(A.charAt(i));
}
if(A.charAt(i) == ')'){
if(stack.isEmpty()){
return false;
}else {
stack.pop();
}
}
}
if(!stack.isEmpty()){
return false;
}
return true;
}
}