思路:循环遍历整个字符串,将遍历到的括号开始符对应的结束符存储在栈中,然后遍历到结束符的时候与栈顶的元素相比较,如果正确则取出栈顶元素,直到循环完成,栈为空则为有效字符串。如果循环中有一次比较为false则该字符串不是有效字符串
代码如下:
//使用栈来储存与括号开始字符相对应的结束字符 然后对比
class Solution {
public boolean isValid(String s) {
//栈先进后出,用于比较括号
Stack<Character> stack = new Stack<>();
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
//判断括号的开始,并且将结束符存入栈中
if(c == '(') {
stack.push(')');
} else if(c == '[') {
stack.push(']');
} else if(c == '{') {
stack.push('}');
} else {
//判断栈是否为空,该处为空只存在一种情况,就是开始就是括号的结束符,
//判断栈顶字符是否与当前字符相同,因为栈中直接存的是结束符,所以可以直接比较,如果不等于则返回false
if(stack.isEmpty() || c != stack.pop()) {
return false;
}
}
}
// 如果整个字符串不为空且都满足要求,那么整个栈在走完循环后应该为空
return stack.isEmpty();
}
}