本文主要是介绍网易2016实习笔试:括号匹配问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述
字符串值包含六种符号(){}[],输入任意字符串,判断括号是否匹配
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)) {// 如果不匹配,且当前字符为右括号"(({]"形式,直接返回falseif (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;}}}
这篇关于网易2016实习笔试:括号匹配问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!