题目:对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。
给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。
测试样例:
“(()())”,6
返回:true
测试样例:
“()a()()”,7
返回:false
测试样例:
“()(()()”,7
返回:false
解析:用一个栈来完成该题目,遇到 “(”就入栈,遇到“)”右括号就弹栈(需要判断栈是否为空,要是空,没的弹 ,直接返回false了)。既不是“(”又不是“)”就返回false
import java.util.*;
public class Parenthesis {
public boolean chkParenthesis(String A, int n) {
Stack<String> stack = new Stack<>();
for(int i=0;i<n;i++){
if(A.charAt(i)=='('){//入栈
stack.push(String.valueOf(A.charAt(i)));
}
else if(A.charAt(i)==')'){//弹栈
if(stack.isEmpty()){//理论上是不为空的,因为前面一般会有个"("与它配对的
return false;
}else {
stack.pop();
}
}else {//不是左括号又不是右括号,返回false
return false;
}
}
return stack.isEmpty();//栈空,说明左括号和右括号都配上了
}
}