链接:合法括号序列判断__牛客网
来源:牛客网
[编程题]合法括号序列判断
- 热度指数:11513 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
给定一个字符串A和其长度n,请返回一个bool值代表它是否为一个合法的括号串(只能由括号组成)。
测试样例:
"(()())",6返回:true测试样例:
"()a()()",7返回:false测试样例:
"()(()()",7返回:false
)(也不是合法的
首先对于这个题来说,需要先判断A是否为空,n是否==0,A.length是否==n
如果第一个是')'的话也是不合法的
- 不使用栈
import java.util.*;
public class Parenthesis {
public boolean chkParenthesis(String A, int n) {
// write code here
if (A.length() == 0 || n == 0 || A.length() != n || n%2 != 0){
return false;
}
int count = 0;
if (A.charAt(0) == ')'){
// 如果遇到第一个是')',直接返回false
return false;
}
for (int i = 0; i < A.length(); i++) {
if (A.charAt(i) == '('){
count++;
}else if (A.charAt(i) == ')'){
count--;
}
}
if (count != 0){
return false;
}else return true;
}
}
- 使用栈
import java.util.*;
public class Parenthesis {
public boolean chkParenthesis(String A, int n) {
// write code here
if (A.length() == 0 || n == 0 || A.length() != n){
return false;
}
Stack<Character> stack = new Stack<>();
for (int i = 0; i < n; i++) {
if (A.charAt(i) == '('){
stack.push(A.charAt(i));
}else if (A.charAt(i) == ')'){
if (stack.isEmpty()){
// 碰到第一个是')',返回false
return false;
}else {
stack.pop();
}
}
}
if (!stack.isEmpty()){
return false;
}else return true;
}
}