括号匹配
来源:互联网 发布:在手机淘宝购物的步骤 编辑:程序博客网 时间:2024/06/04 18:07
个字符,处理相应的括号,判断这个表达式的括号是不是匹配。
思路:
循环遍历字符串,读取字符每一个字符,记做“ch”,如果ch是左括号,则入栈;如果ch是右括号,则: 如果栈空:说明多出右括号,返回false; 如果栈不空,ch和栈顶比较,如果不同,返回false;如果匹配,则出栈一次;如果循环结束后栈空,则返回true,说明左括号匹配完了;如果循环结束后栈不空,则返回false。
public class BracketMatch { public static void main(String[] args) { // 测试字符串,第一个匹配,第二个不匹配 String inputStr1 = "{[(2+4)+(3-5)/9]*4+1}*{[(2-4)+(3-5)*9]*(4+1)}"; String inputStr2 = "{[(2+4)+(3-5)/9]*4+1}*{[(2-4)+(3-5)*9]*(4+1}"; System.out.println(match(inputStr1) + "..." + match(inputStr2)); } public static boolean match(String inputStr) { int len = inputStr.length(); LinkedList<Character> stack = new LinkedList<Character>(); // 循环遍历字符串 for (int i = 0; i < len; i++) { // 如果是左括号则入栈 if (isLeftBracket(inputStr.charAt(i))) { stack.push(inputStr.charAt(i)); // 如果是右括号 } else if (isRightBracket(inputStr.charAt(i))) { // 栈空,则右括号没有匹配的左括号,则返回false if (stack.isEmpty()) { return false; // 栈不空,则和栈顶比较 } else if (stack.peek().equals(inputStr.charAt(i))) { return false; } else { stack.pop(); } } } // 循环结束后,栈空表示匹配完了,不空表示多余左括号 if (stack.isEmpty()) { return true; } else { return false; } } /** * 判断字符是不是左括号 * * @param ch * @return */ public static boolean isLeftBracket(char ch) { if (ch == '(' || ch == '[' || ch == '{') { return true; } else { return false; } } /** * 判断字符是不是右括号 * * @param ch * @return */ public static boolean isRightBracket(char ch) { if (ch == ')' || ch == ']' || ch == '}') { return true; } else { return false; } }}
0 0
- 括号括号括号匹配
- 括号匹配
- 括号匹配
- 括号匹配
- 括号匹配
- 括号匹配/()[]
- 括号匹配
- 括号匹配
- 括号匹配
- 括号匹配
- 括号匹配!!!!
- 括号匹配
- 括号匹配
- 括号匹配
- 括号匹配
- 括号匹配
- 括号匹配
- 括号匹配
- 蚍蜉叹
- 小米 树高度
- 菜鸟-需求预测与分仓规划
- 34.N-Queens II-N皇后问题 II(中等题)
- JavaEE----referer属性运用
- 括号匹配
- HTML5画布与SVG
- CodeForces #352B.Jeff and Periods
- 使用Unity的Standard Assets进行原型制作
- 【C语言基础】文件中任意位置插入写操作的实现/Implementation For File Insertion Operation based on C standard lib.
- jquery 简单操作map
- Hex文件转Bin文件
- 7种形式的Android Dialog使用举例
- android studio报错:Error:(110, 41) 错误: 无法访问HttpRequestBase