难度:简单
题目:
给定一个只包括
'('
,')'
,'{'
,'}'
,'['
,']'
的字符串s
,判断字符串是否有效。
描述:
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}" 输出:true
示例 3:
输入:s = "(]" 输出:false
提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
Related Topics
- 栈
- 字符串
重点!!!解题思路
这道题相对来说比较简单,我们可以用栈来实现这道题,
当拿到左括号时,入栈
当拿到右括号时,出栈
有一部分代码可以优化:当遍历到右括号时,我们都需要判断这个右括号是哪个括号并且是否和此时栈顶相等,这样的话有很多代码就会重复,我们优化的话就需要在程序初始化的时候创建一个Map集合来存储每个括号,这样当我们遍历到右括号时,我们就可以省略很多代码,也提高了代码效率。
源码:
class Solution {
public boolean isValid(String s) {
Map<Character,Character> map = new HashMap<>();
map.put('}','{');
map.put(']','[');
map.put(')','(');
Stack<Character> stack=new Stack<>();
for (int i=0;i<s.length();i++){
switch (s.charAt(i)){
case '(':
case '{':
case '[': stack.push(s.charAt(i)); break;
case ')':
case '}':
case ']':
if (stack.isEmpty() || map.get(s.charAt(i))!=stack.peek()){ //在map中通过key取value
return false;
}
stack.pop();
break;
}
}
return stack.isEmpty();
}
}
运行结果:
如果您还有什么疑问或解答有问题,可在下方评论,我会及时回复。
系列持续更新中,点个订阅吧