问题描述
字符串值包含六种符号(){}[],输入任意字符串,判断括号是否匹配
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;
}
}
}