1 题目描述
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2 解题思路
-
解决方法:辅助栈法
栈先入后出特点恰好与本题括号排序特点一致 -
是左括号的话,对应的右括号如栈
-
是右括号的话,判断栈顶元素和当前字符是不是相等,不等直接返回false
-
最后返回值,是布尔值,看栈是不是为空,return stack.empty()
-
暴力替换法
-
python 直接字符替换方法也可
3 解决代码
- 解决方法:辅助栈法《Java代码》
class Solution {
public boolean isValid(String s) {
if(s.isEmpty()){
return true;
}
Stack<Character> stack = new Stack<Character>();
for (char c : s.toCharArray()){
//是左括号的话,对应的右括号如栈
//是右括号的话,判断栈顶元素和当前字符是不是相等,不等直接返回false
if(c == '(') stack.push(')');
else if(c == '{') stack.push('}');
else if(c == '[') stack.push(']');
else if(stack.empty() || c != stack.pop()){
return false;
}
}
return stack.empty();
}
}
- 解决方法:暴力替换法《python3代码》
class Solution:
def isValid(self, s: str) -> bool:
while '{}' in s or '()' in s or '[]' in s:
s = s.replace('{}', '')
s = s.replace('()', '')
s = s.replace('[]', '')
return s == ''