java:数据结构(二)栈的应用(括号匹配)

时间:2021-12-25 14:34:39

一.什么是括号匹配:

括号匹配就是利用计算机辨别表达式里面的括号是否书写成功

例如:

{()((a)) }这就是一个正确

(()()   这就是一个错误的

二.括号匹配的算法:

众所周知,括号分为花括号,大括号,小括号,{,[,(

但读取到左边的货号的时候将,左边的括号入栈

如果读取到},)],就让栈里面的元素出栈,如果匹配的话,就没问题。

最后如果栈中元素为空就代表括号匹配,不为空,反之,匹配失败

三.源码:(代码中栈使用的是我自己写的)

     /**
* 括号匹配
* @param n 传入需要检测的字符串
* @return true 括号匹配成功 false 不符合匹配规则
*/
static boolean correct(String n) {
MyArraysStack<Character> e=new MyArraysStack<Character>();
char[] p = n.toCharArray();
for (char l : p) {
if (l == '(' || l == '{' || l == '[') {
e.push(l);
} else if(l==']'||l=='}'||l==')'){
char d = e.getTop();
if (d == '[') {
if (l == ']') {
e.pop();
} else {
return false;
}
} else if (d == '(') {
if (l == ')') {
e.pop();
} else {
return false;
}
} else if (d == '{') {
if (l == '}') {
e. pop();
} else {
return false;
}
}
}
}
if(!e.isEmpty()){
return false;
}
return true;
}

四.例题

题目描述

对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。

给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。

测试样例:
"(()())",6
返回:true
测试样例:
"()a()()",7
返回:false
测试样例:
"()(()()",7
返回:false
 import java.util.*;

 public class Parenthesis {
public boolean chkParenthesis(String A, int n) {
// write code here
Stack a=new Stack();
char p[]=A.toCharArray();
for(char d:p){
if(d=='('){
a.add(d);
}else if(d==')'){
if(a.size()==0){
return false;
}else{
if((char)a.pop()=='('){ }else{
return false;
}
}
}
}
if(a.size()==0){
return true;
}else{
return false;
}
}
}

来源于牛客网:https://www.nowcoder.com/practice/d8acfa0619814b2d98f12c071aef20d4?tpId=8&&tqId=11039&rp=1&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking