数据结构的应用——使用栈实现字符串括号匹配检查
2011-03-23 20:32
525 查看
假设表达式中允许包含两种括号:圆括号和方括号,其嵌套顺序随意,及([]())或[([][])]等均为正确的格式,[(])或([())或(()]均为不正确的格式。
匹配算法的思想是:
首先将第一个括号压入栈,然后从第二个括号开始,如果与栈顶元素能匹配,能将栈顶元素弹出;如果不匹配,则将该元素压入栈中。
当带匹配字符串遍历结束后,检查栈是否为空,为空则表示匹配成功了,如果非空则表示还有括号未能匹配,即该字符串匹配失败。
具体代码:
匹配算法的思想是:
首先将第一个括号压入栈,然后从第二个括号开始,如果与栈顶元素能匹配,能将栈顶元素弹出;如果不匹配,则将该元素压入栈中。
当带匹配字符串遍历结束后,检查栈是否为空,为空则表示匹配成功了,如果非空则表示还有括号未能匹配,即该字符串匹配失败。
具体代码:
package ds.linerlist; import java.util.Stack; /** * 使用栈实现字符串的括号匹配检查。 * @author <a href="mailto:bao.yiming@live.cn" mce_href="mailto:bao.yiming@live.cn">Bao Yiming</a> */ public class BracketMatch { /** * 进行匹配的算法。 * @param str 待检查的字符串。 * @return */ public static boolean match(String str) { Stack stack = new Stack(); // 定义一个存放括号的栈。 char[] ca = str.toCharArray(); // 将字符串转为字符数组以便对其遍历。 stack.push((Character) ca[0]); // 首先将第一个字符压入栈中。 /* * 从第二个字符开始,依次与栈中字符匹配。 * 成功则将栈顶元素弹出。 * 失败则将字符数组中的当前字符压入栈中。 */ for (int index = 1; index < ca.length; ++index) { Character c1 = (Character) stack.peek(); Character c2 = ca[index]; if ((c1.equals('(') && c2.equals(')')) || (c1.equals('[') && c2.equals(']'))) { stack.pop(); } else { stack.push(c2); } } return stack.empty(); } }
相关文章推荐
- 使用堆栈来实现括号匹配的检查
- 堆栈数据结构应用之括号匹配检查(算法3.2.2)
- 对如下字符串(234453)[234]{2324}分析它的括号使用是否正确,括号匹配(Java实现)
- 【数据结构】栈的应用 括号匹配
- PHP数据结构之六 PHP栈的应用举例【数制转换和括号匹配算法】
- 使用堆栈实现括号的匹配
- 数据结构复习_栈和队列,应用_括号匹配&文件目录递归拷贝,
- 【数据结构】用栈实现括号匹配的检验
- 数据结构 栈的应用 括号匹配
- 栈 实际应用1 如何使用栈来判定括号是否匹配
- 使用boost库的正则表达式regex实现从一篇文档中找出所有匹配的字符串
- 重温数据结构-栈的应用:进制转换,括号匹配检测,行编辑,迷宫求解,求表达式的值
- JS使用split分割字符串并应用正则匹配
- 字符串括号匹配检查
- 数据结构 栈应用(括号匹配检测)
- 数据结构c语言实现字符串定位(模式匹配)
- 简单算法——使用栈实现括号匹配检验
- 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)
- 用链栈实现字符串表达式括号匹配算法
- 【面试经典题之字符串】实现一个算法,确定一个字符串的所有字符是否全都不同。假设不允许使用额外的数据结构