[编程题]括号匹配问题
来源:互联网 发布:js动态显示隐藏div 编辑:程序博客网 时间:2024/05/16 10:19
关于括号匹配问题可以扩展出来好几个问题:
- 传统的括号匹配,给出一个字符串,判断里面的括号是否匹配
- 给你一个字符串,里面只包含”(“,”)”,”[“,”]”四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。
1 传统的括号匹配
给定字符串,输出括号是否匹配,例如:
)
false
()
true
(a)
true
[]{{}}(aa)
true
解决这个问题最经典的就是用栈来实现
public class Test { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); String str = ""; while(scanner.hasNext()){ str = scanner.nextLine(); if ("Q".equals(str)) { break; } System.out.println(match(str)); } } private static boolean match(String str) { Stack<Character> stack = new Stack<>(); char[] chars = str.toCharArray(); for (int i = 0; i < chars.length; i++) { try { switch (chars[i]) { case '(': stack.add('('); break; case '[': stack.add('['); break; case '{': stack.add('{'); break; case ')': if (stack.peek() == '(') { stack.pop(); } break; case ']': if (stack.peek() == '[') { stack.pop(); } break; case '}': if (stack.peek() == '{') { stack.pop(); } break; default: break; } } catch (EmptyStackException e) { return false; } } return stack.empty(); }}
2
这道题转载自:http://blog.csdn.net/beiyeqingteng/article/details/7695274
给你一个字符串,里面只包含”(“,”)”,”[“,”]”四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。
如:
[]是匹配的,所需括号个数为 0.
([])[]是匹配的, 所需括号个数为 0.
((]是不匹配的, 所需最少括号个数为 3.
([)]是不匹配的,所需最少括号个数为 2.
public static void minBrace(String s) { int size = s.length(); // we begin with mb[1][1] int[][] mb = new int[size + 1][size + 1]; for(int i = 1; i <= size; ++i){ mb[i][i] = 1; } // d refers to the distance between i and j, that is d = j - i for(int d = 1; d < size; d++){ for (int i = 1; i + d <= size; i++) { int j = i + d; // the worst case mb[i][j] = Math.min(mb[i][j - 1], mb[i + 1][j]) + 1; // the case in which a char between i and j (= i + d) matches // the character at position j + 1 for (int k = i ; k <= j - 1; k++ ) { if (match(s.charAt(k - 1), s.charAt(j - 1)) == true) { mb[i][j] = Math.min(mb[i][j], mb[i][k - 1] + mb[k + 1] [j - 1]); } } } } System.out.println(mb[1][size]); } static boolean match(char a, char b){ if(a == '(' && b == ')') return true; if(a == '[' && b == ']') return true; return false; }
0 0
- [编程题]括号匹配问题
- 括号匹配编程题--python
- NYOJ的水题--括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号的匹配问题
- 括号匹配问题
- 括号匹配问题
- [栈] 括号匹配问题
- NY : 括号匹配问题
- 括号匹配问题
- Java 括号匹配问题
- 括号匹配问题
- HDU-5780 gcd
- Leetcode 35. Search Insert Position (Medium) (cpp)
- HDU 2509 Be the Winner && HDU 1907 John (Nim博弈变形)
- unity优化杂谈1
- 矢量控制——SVPWM
- [编程题]括号匹配问题
- poj-4118-OpenJ_Bailian-开餐馆【贪心】【背包】
- VS2015使用技巧 dll之新建类库,添加类库至现有项目,实例化类库中的类
- KMP算法小结
- android下数据库的创建
- google play service lib 最新android版本库下载地址
- Super Jumping! Jumping! Jumping! (最长上升子序列的和)
- 如何理解和熟练运用js中的call及apply?
- 最大子串和