题目描述:
对于一个字符串,请设计一个算法,判断是否为一个合法的括号串。
给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。
一个合法的括号串定义为:1.只包括括号字符;2.左括号和右括号一一对应。
测试样例:
“(()())”,6
返回:true;
测试样例:
“()a()()”,7
测试样例:
返回:false;
“()(()()”,7
返回:false;
思路:
首先将字符串转为字符数组,遍历整个数组,拿到每一个下标对应的字符,判断其是否是“( ”,若是,将其压入栈,;然后取到“ )”,判断栈顶元素是否是“( ”,若是,则将其出栈,否则返回false。主要利用了栈“先进后出”的特性。
代码:
import java.util.Stack;
public class Test5 {
public static void main(String[] args) {
String str = "()a()()";
boolean b = chkParenthesis(str,7);
System.out.println(b);
}
public static boolean chkParenthesis(String A, int n) {
Stack<Character> stack = new Stack<>();
char[] ch = A.toCharArray();
for (int i = 0; i < n; i++) {
if (ch[i] == '(') {
stack.push(ch[i]);
} else if (ch[i] == ')') {
if (!stack.empty() && stack.peek() == '(') {
stack.pop();
} else {
return false;
}
} else {
return false;
}
}
return true;
}
}
版权声明:本文为weixin_45481403原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。