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

一.什么是括号匹配:

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

例如:

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

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

二.括号匹配的算法:

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

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

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

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

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

 1     /**
 2      * 括号匹配
 3      * @param n 传入需要检测的字符串
 4      * @return true 括号匹配成功 false 不符合匹配规则
 5      */
 6     static boolean correct(String n) {
 7         MyArraysStack<Character> e=new MyArraysStack<Character>();
 8         char[] p = n.toCharArray();
 9         for (char l : p) {
10             if (l == '(' || l == '{' || l == '[') {
11                 e.push(l);
12             } else if(l==']'||l=='}'||l==')'){
13                 char d = e.getTop();
14                 if (d == '[') {
15                     if (l == ']') {
16                         e.pop();
17                     } else {
18                         return false;
19                     }
20                 } else if (d == '(') {
21                     if (l == ')') {
22                         e.pop();
23                     } else {
24                         return false;
25                     }
26                 } else if (d == '{') {
27                     if (l == '}') {
28                         e. pop();
29                     } else {
30                         return false;
31                     }
32                 }
33             }
34         }
35         if(!e.isEmpty()){
36             return false;
37         }
38         return true;
39     }

四.例题

  

题目描述

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

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

测试样例:
"(()())",6
返回:true
测试样例:
"()a()()",7
返回:false
测试样例:
"()(()()",7
返回:false
 1 import java.util.*;
 2 
 3 public class Parenthesis {
 4     public boolean chkParenthesis(String A, int n) {
 5         // write code here
 6         Stack a=new Stack();
 7         char p[]=A.toCharArray();
 8         for(char d:p){
 9             if(d=='('){
10                 a.add(d);
11              }else if(d==')'){
12                  if(a.size()==0){
13                      return false;
14                  }else{
15                 if((char)a.pop()=='('){
16                     
17                 }else{
18                     return false;
19                   }
20               }
21             }
22         }
23         if(a.size()==0){
24         return true;
25         }else{
26             return false;
27          }
28     }
29 }

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

posted @ 2019-02-18 17:09  dark_Souls  阅读(1194)  评论(0编辑  收藏  举报