题目描述
给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。
解题思路:
- 这种自己跟自己匹配的题目,首先想到的就是栈,所以这道题使用入栈和弹栈的思想来解
- 当字符串出现向右的括号时,在栈中加入向左的括号(如,在字符串中,出现’(’,在栈中就加入’)’)
- 当字符串没有出现向右的括号时,栈中的元素就弹出,跟字符串的括号匹配,如果相等,就不进行操作;如果不能,返回false
- 如果最后栈不为空,也返回false(如果输入时‘{’,不检查栈是否为空,就会导致错误)
import java.util.*;
public class Solution {
/**
*
* @param s string字符串
* @return bool布尔型
*/
public boolean isValid (String s) {
// write code here
if(s.length() == 0){
return false;
}
Stack<Character> stack = new Stack<>();
for(int i=0; i<s.length(); i++){
if(s.charAt(i) == '('){
stack.push(')');
}else if(s.charAt(i) == '{'){
stack.push('}');
}else if(s.charAt(i) == '['){
stack.push(']');
}else if(stack.isEmpty() || stack.pop() != s.charAt(i) ){
return false;
}
}
return stack.isEmpty();
}
}