题目描述:
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
解题分析:
本题目是栈这个数据结构在应用中很经典的体现。我们的具体做法如下:
1.创建栈遍历字符串,若遇到左括号则将其存入到栈中
2.若遇到右括号则从栈顶取出一个与其比较,若不存在符合的则返回false
3.最后若栈已经清空,则说明为有效括号
代码:
class Solution20 {
//Use Stack
//N is the length of S
//Time Complexity: O(N)
//Space Complexity: O(N)
public boolean isValid(String s) {
//如果为空串,也为有效
if (s.length() == 0) return true;
//创建栈
Stack<Character> stack = new Stack<>();
//如果是左括号,则存入
for (char ch: s.toCharArray()) {
if (ch == '(' || ch == '[' || ch == '{') {
stack.push(ch);
} else {
if (stack.isEmpty()) { //做括号一个也不存在,则为无效
return false;
} else {
char temp = stack.pop();
if (ch == ')') {
if (temp != '(') {
return false;
}
} else if (ch == ']') {
if (temp != '[') {
return false;
} else if (temp == '}') {
if (temp != '}') {
return false;
}
}
}
}
}
}
//最后若栈为空,则为有效
return stack.isEmpty() ? true : false;
}
}