一、题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}" 输出:true
示例 3:
输入:s = "(]" 输出:false
示例 4:
输入:s = "([)]" 输出:false
示例 5:
输入:s = "{[]}" 输出:true
提示:
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
二、思路分析:
看到括号的匹配,就想起了大学数据结构课讲栈时举例,用栈实现带括号的加减乘除运算。思路与本题一致,所以考虑用栈的出栈和入栈来实现。
三、AC 代码:
class Solution {
public boolean isValid(String s) {
Map<Character, Character> map = bracketMap();
char[] chars = s.toCharArray();
if (chars.length%2 != 0){
return false;
}
Stack<Character> stack = new Stack<>();
for (int i = 0; i < chars.length; i++) {
boolean flag = map.containsKey(chars[i]);
if (flag){
stack.add(chars[i]);
}else {
if (stack.empty()){
return false;
}
Character pop = stack.pop();
if (chars[i] != map.get(pop)){
return false;
}
}
}
return stack.empty();
}
public Map<Character,Character> bracketMap(){
Map<Character,Character> map = new HashMap<>();
map.put('(',')');
map.put('{','}');
map.put('[',']');
return map;
}
}
四、总结:
追求极致的性能可考虑自己实现简易栈完成。
“本文正在参与「掘金 3 月闯关活动」,点击查看活动详情。”