Chinaunix首页 | 论坛 | 博客
  • 博客访问: 145687
  • 博文数量: 108
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 940
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-15 20:24
个人简介

反反复复

文章分类

全部博文(108)

文章存档

2014年(72)

2013年(36)

我的朋友

分类: C/C++

2013-04-26 20:32:51

假设表达式中允许包含两种括号:圆括号和方括号,其嵌套顺序随意,及([]())或[([][])]等均为正确的格式,[(])或([())或(()]均为不正确的格式。

匹配算法的思想是:

首先将第一个括号压入栈,然后从第二个括号开始,如果与栈顶元素能匹配,能将栈顶元素弹出;如果不匹配,则将该元素压入栈中。

当带匹配字符串遍历结束后,检查栈是否为空,为空则表示匹配成功了,如果非空则表示还有括号未能匹配,即该字符串匹配失败。

具体代码:


点击(此处)折叠或打开

  1. package ds.linerlist;
  2.     import java.util.Stack;
  3.     /**
  4.      * 使用栈实现字符串的括号匹配检查。
  5.      * @author <a href="mailto:bao.yiming@live.cn" mce_href="mailto:bao.yiming@live.cn">Bao Yiming</a>
  6.      */
  7.     public class BracketMatch {
  8.         /**
  9.          * 进行匹配的算法。
  10.          * @param str 待检查的字符串。
  11.          * @return
  12.          */
  13.         public static boolean match(String str) {
  14.             Stack stack = new Stack(); // 定义一个存放括号的栈。
  15.             char[] ca = str.toCharArray(); // 将字符串转为字符数组以便对其遍历。
  16.             stack.push((Character) ca[0]); // 首先将第一个字符压入栈中。
  17.             /*
  18.              * 从第二个字符开始,依次与栈中字符匹配。
  19.              * 成功则将栈顶元素弹出。
  20.              * 失败则将字符数组中的当前字符压入栈中。
  21.              */
  22.             for (int index = 1; index < ca.length; ++index) {
  23.                 Character c1 = (Character) stack.peek();
  24.                 Character c2 = ca[index];
  25.                 if ((c1.equals('(') && c2.equals(')'))
  26.                         || (c1.equals('[') && c2.equals(']'))) {
  27.                     stack.pop();
  28.                 } else {
  29.                     stack.push(c2);
  30.                 }
  31.             }
  32.             return stack.empty();
  33.         }
  34.     }
http://blog.csdn.net/baoyiming1991/article/details/6272256
阅读(1326) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~