网易2016实习笔试:括号匹配问题

来源:互联网 发布:扑克王软件下载 编辑:程序博客网 时间:2024/06/05 16:13

问题描述

字符串值包含六种符号(){}[],输入任意字符串,判断括号是否匹配

package com.problem;/** * 网易实习: * 字符串值包含六种符号(){}[],输入任意字符串,判断括号是否匹配 * 提示:用栈实现 push() pop()方法 */import java.util.Stack;import java.util.Scanner;public class SymbolMatch {    public static void main(String[] args) {        Scanner input = new Scanner(System.in);        while(input.hasNext()) {            String str = input.next();            boolean isMatch = isValid(str);            System.out.println(isMatch);        }        input.close(); // 注意关闭资源    }    public static boolean isValid(String str) {        Character prev, current;        Stack<Character> stack = new Stack<Character>();        for(int i = 0; i < str.length(); i++) {            current = str.charAt(i);            if (stack.empty()) {                // 如果栈为空,入栈的字符为右括号,直接返回false,否则正常入栈                if (current.equals(')') || current.equals('}') || current.equals(']')) {                    return false;                } else {                    stack.push(current);                }            } else {                prev = stack.pop();                if (!match(prev, current)) {                    // 如果不匹配,且当前字符为右括号"(({]"形式,直接返回false                    if (current.equals(')') || current.equals('}') || current.equals(']')) {                        return false;                    } else {                        stack.push(prev);  // 注意入栈顺序                        stack.push(current);                    }                }            }         }        // 全部匹配完之后如果栈为空,则所有匹配完成,否则字符串不匹配        if (stack.empty()) {            return true;        } else {            return false;        }    }    // 判断成对的字符是否匹配    public static boolean match(Character a, Character b) {        if (a.equals('(') && b.equals(')')) {            return true;        } else if (a.equals('{') && b.equals('}')) {            return true;        } else if (a.equals('[') && b.equals(']')) {            return true;        } else {            return false;        }    }}
0 0