题目
给定一个字符串A和其长度n,请返回一个bool值代表它是否为一个合法的括号串(只能由括号组成)。
测试样例1:
输入:“(()())”,6
返回:true
测试样例2:
输入:“()a()()”,7
返回:false
测试样例3:
输入:“()(()()”,7
返回:false
解题
- 用栈这个数据结构。像这种括号匹配的问题,是用栈这个数据结构解决的典型问题。
- 如果这个字符串的长度时奇数,括号肯定不能匹配。
- 如果这个字符串的长度为偶数,如果其中的字符是左括号,就入栈,如果其中的字符是右括号,就把栈中的左括号,弹出来一个。如果其中的字符既不是左括号,也不是有括号,就直接然后false。
- 最后判断栈是否为空。如果栈为空,括号能匹配完成,返回true。如果栈不为空,括号不能匹配完成,返回false。
代码
import java.util.*;
public class Parenthesis {
public boolean chkParenthesis(String A, int n) {
// write code here
if(n % 2 != 0){ //判断字符长的是否为奇数,如果是奇数,直接返回false。
return false;
}
Stack<Character> stack = new Stack();
for(char c: A.toCharArray()){
if(c == '('){ //如果是左括号就入栈
stack.push(c);
}else if(c == ')'){ //如果是有括号就出栈
if(stack.isEmpty()){
return false;
}else if(stack.peek() == '('){
stack.pop();
}else{ //既不是左括号也不是右括号,就直接返回false。
return false;
}
}
}
return stack.isEmpty(); //如果栈为空,返回true。如果栈不为空,返回false。
}
}