栈的应用:平衡符号问题
2013-09-30 11:41
363 查看
【问题描述】:初学者在编写代码并且编译时,难免会因为少写了一个')'和被编译器报错。也就是说,编译器会去匹配括号是否匹配。当你输入了一个'(',很自然编译器回去检查你是否有另一个')'符号与之匹配。如果所有的括号都能够成对出现,那么编译器是能够通过的。否则编译器会报错。例如字符序列“(a+b)”是匹配的,而字符序列"(a+b]"则不是。
在检测括号匹配的算法中使用到了栈,算法描述如下:创建一个空栈,读取字符序列直到结尾。如果字符是开放符号'(''[''{',将其入栈;如果是一个封闭符号')'']''}',则当栈为空时报错(不匹配),否则,将栈顶元素弹出,如果弹出的符号不是对应的开放符号,则报错(不匹配)。
注意:本题目和前面的一篇博文《2014年有道研发岗算法题(9月17):规则序列问题
》有区别,采用栈实现规则序列问题无法找到最优解。
Java实现代码如下:
转载时请注明来源:http://blog.csdn.net/ccfeng2008
代码测试通过
在检测括号匹配的算法中使用到了栈,算法描述如下:创建一个空栈,读取字符序列直到结尾。如果字符是开放符号'(''[''{',将其入栈;如果是一个封闭符号')'']''}',则当栈为空时报错(不匹配),否则,将栈顶元素弹出,如果弹出的符号不是对应的开放符号,则报错(不匹配)。
注意:本题目和前面的一篇博文《2014年有道研发岗算法题(9月17):规则序列问题
》有区别,采用栈实现规则序列问题无法找到最优解。
Java实现代码如下:
转载时请注明来源:http://blog.csdn.net/ccfeng2008
代码测试通过
public class BalanceSymbol { public static boolean balance(String str) { if (str == null || (str = str.trim()).trim().equals("")) return true; Stack<Character> stack = new Stack<Character>(); boolean flag = true; char tmp; for (int i = 0, len = str.length(); i < len; i++) { tmp = str.charAt(i); if (tmp == '(' || tmp == '[' || tmp == '{') stack.push(tmp); if (tmp == ')' && (stack.isEmpty() || stack.pop() != '(')) { flag = false; break; } if (tmp == ']' && (stack.isEmpty() || stack.pop() != '[')) { flag = false; break; } if (tmp == '}' && (stack.isEmpty() || stack.pop() != '{')) { flag = false; break; } } return flag && stack.isEmpty(); } public static void main(String[] args) { System.out.println(balance("()"));//true System.out.println(balance("{}"));//true System.out.println(balance("[]"));//true System.out.println(balance("([{}])"));//true System.out.println(balance("([)]"));//false System.out.println(balance("(([])[()]{[]})"));//true System.out.println(balance("{}(([])[()]{[]}[)"));//false } }
相关文章推荐
- 栈的应用 - 符号平衡问题
- javascript数据结构中栈的应用之符号平衡问题
- 栈的应用 — 平衡符号
- Java栈的应用检测平衡符号
- 栈的应用---平衡符号的检测
- 堆栈的应用--用C语言实现平衡符号
- 栈的应用-平衡符号(C版)
- 栈应用—平衡符号
- 栈的应用--栈用作判断平衡符号,[()]对的,[(])错的
- web 开发笔记“CSS hack大全之特殊符号的应用解决浏览器兼容性问题”
- 栈的应用之平衡符号
- python数据结构与算法 6栈的应用之符号平衡(通用)
- 栈的应用----平衡符号
- Stack的应用——符号匹配问题
- 栈的应用 平衡符号 后缀表达式 中缀到后缀的转换
- 栈的应用之平衡符号
- 栈的应用--平衡符号
- 栈的应用之检测平衡符号
- javascript栈的应用之符号平衡
- 栈的简单应用1-平衡符号