一、题目大意
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
二、解题思路
用栈去解决,虽然在实际工作中很少用到栈但是也是要去掌握的,将字符串按字符遍历,遇到左括号就入栈,遇到右括号就和栈顶元素进行匹配能匹配上就继续下一个元素,匹配不上就返回false,最后还有一点要注意的就是遍历完所有字符后,栈必须为空才算是一个有效字符串。
三、解题方法
3.1 Java实现
public class Solution2 {
public boolean isValid(String s) {
Stack<Character> charStack = new Stack<>();
Map<Character, Character> patternMap = new HashMap<>(){{
put(')', '(');
put(']', '[');
put('}', '{');
}};
for (char c : s.toCharArray()) {
if (!patternMap.containsKey(c)) {
charStack.push(c);
continue;
}
if (charStack.isEmpty() || !patternMap.get(c).equals(charStack.pop())) {
return false;
}
}
return charStack.isEmpty();
}
}
四、总结小记
- 2023/8/16 年龄越大,担子越大,和能力没有关系,这几天老是失眠