思路:这个题是典型的栈的应用。
遍历字符串中的所有字符
1,如果遇到了左括号,就把对应的右括号压栈。
2,如果遇到了右括号
1)查看栈是否为空,如果为空,说明不能构成有效的括号,直接返回false。
2)如果栈不为空,栈顶元素出栈,然后判断出栈的这个元素是否等于这个右括号,如果不等于,说明不匹配,直接返回false。如果匹配,就继续判断字符串的下一个字符。
3,最后如果栈为空,说明是完全匹配,是有效的括号,否则如果栈不为空,说明不完全匹配,不是有效的括号。
代码:
class Solution {
public boolean isValid(String str) {
Stack<Character> s = new Stack<Character>();
char [] c = str.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] == '(') {
s.push(')');
}
else if (c[i] == '[') {
s.push(']');
}
else if (c[i] == '{') {
s.push ('}');
}
else {
if (s.isEmpty()) {
return false;
}
if (s.pop() != c[i]) {
return false;
}
}
}
return s.isEmpty();
}
}