给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
**输入:**s = "()"
**输出:**true
思路:将待匹配的左侧符号入栈,遇到右侧符号时弹出匹配,如果匹配失败立刻返回false
如果遍历结束,依然有左侧符号未被弹出,返回false
长为0和1的单独处理
java
class Solution {
public boolean isValid(String s) {
if(s == null || s.length() == 0) return true;
if(s.length()==1) return false;
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(' || c == '{' || c == '[') {
stack.push(c);
}
else if (c == ')' ) {
if (stack.isEmpty()) {
return false;
}
else {
char top = stack.pop();
if (top != '(') {
return false;
}
}
}
else if (c == '}' ) {
if (stack.isEmpty()) {
return false;
}
else {
char top = stack.pop();
if (top != '{') {
return false;
}
}
}
else if (c == ']' ) {
if (stack.isEmpty()) {
return false;
}
else {
char top = stack.pop();
if (top != '[') {
return false;
}
}
}
}
if(stack.isEmpty()) return true;
return false;
}
}