本文共 1971 字,大约阅读时间需要 6 分钟。
问题描述
字符串值包含六种符号(){}[],输入任意字符串,判断括号是否匹配
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; Stackstack = new Stack (); 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; } }}
转载地址:http://buxgi.baihongyu.com/