题目描述
链接:https://www.nowcoder.com/questionTerminal/d8acfa0619814b2d98f12c071aef20d4
对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。
给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。
测试样例:
“(()())”,6
返回:true
测试样例:
“()a()()”,7
返回:false
测试样例:
“()(()()”,7
返回:false
思路一
利用count来计数,“(”括号加一,“)”减一,如果中间出现其他符号直接返回false,最后判断count是否为0,如果为0则返回true,否则返回false。在开始可以判断n的奇数还是偶数,是奇数可以直接返回false。
代码实现
import java.util.*;
public class Parenthesis {
public boolean chkParenthesis(String A, int n) {
// write code here
int count = 0;
if(n%2==1) {
return false;
}
for(int i = 0; i<n;i++) {
if(A.charAt(i)!='(' && A.charAt(i)!=')') {
return false;
}
if(A.charAt(i)=='('){
count++;
}
if(A.charAt(i)==')'){
count--;
}
}
return count==0;
}
}
思路二 通过栈来实现
1.碰到")“出栈,碰到”("入栈,出站时一定注意栈为空,则返回false
2.碰到其他内容直接返回false
3.字符串结尾时,栈非空返回false
代码实现
import java.util.*;
public class Parenthesis {
public boolean chkParenthesis(String A, int n) {
// write code here
Stack<Character> stack = new Stack<Character>();
for(int i = 0; i < n; i++){
if(A.charAt(i) == '('){
stack.push(A.charAt(i));
}else if(A.charAt(i) == ')'){
if(stack.empty()){
return false;
}else{
stack.pop();
}
}else{
return false;
}
}
if(stack.empty()){
return true;
}else{
return false;
}
}
}
栈基本操作
初始化
Stack stack=new Stack
判断是否为空
stack.empty()
取栈顶值(不出栈)
stack.peek()
进栈
stack.push(Object);
出栈
stack.pop();