zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    运算符
    变量
    JSP EL表达式使用
    MySQL JDBC 连接数据库基本操作
    一个带标号的CSS文章列表写法
    CSS图片列表
    YUI3 CSS
    Ubuntu 13.10 64位 无法 安装 ia32-libs 解决办法
    [转]编译Android源代码常见错误解决办法
    js 复制对象
  • 原文地址:https://www.cnblogs.com/lzy321/p/10392434.html
Copyright © 2011-2022 走看看