java左右括号
最近看到有小伙伴去面试,被人问起一道算法题,题目内容大概是:给定一个字符串,如:"[[]]{}",判断字符串是否为有效的括号。考查的是数据结构,下面用的是java的栈实现左右括号的校验。
数据结构-栈
栈的特点:先进后出
代码实现
java
public static void main(String[] args) {
input("([)]");
input("}}");
input("[[]]{}");
}
private static void input(String str) {
boolean valid = valid(str);
System.out.println(str + ": " + valid);
}
/**
* 校验指定的字符串是否匹配
*
* @param str 校验的字符串
* @return true:匹配;false:不匹配
*/
private static boolean valid(String str) {
char[] chars = str.toCharArray();
Stack<Character> charsStack = new Stack<>();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == '(' || chars[i] == '[' || chars[i] == '{') {
//1. 左括号,则入栈
charsStack.push(chars[i]);
} else {
//2. 右括号,则出栈比较
if (charsStack.size() == 0) {
//2.1 字符串不为空,但是栈无数据,即没有对应的左括号入栈,则不匹配
return false;
}
//2.2 出栈的数据是否成对括号
char pop = charsStack.pop();
if (pop == '(' && chars[i] != ')') {
return false;
} else if (pop == '[' && chars[i] != ']') {
return false;
} else if (pop == '{' && chars[i] != '}') {
return false;
}
}
}
//3. 出栈后的栈为空,则说明是成对出现,则匹配
return charsStack.isEmpty();
}
上述的代码,仅供参考!