有效的括号(简单)
2020年4月18日
题目来源:有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
解题思路
用栈做,是左括号就进栈,下一个字符就跟栈顶左括号进行匹配,这里用了哈希表来存储匹配信息,若匹配就出栈,进行下一次字符的操作。
代码实现
class Solution {
public boolean isValid(String s) {
if(s==null || s.length()==0)
return true;
Map<Character,Character> map=new HashMap<>();
Stack<Character> sk=new Stack<>();
map.put(')', '('); //这里右括号是key,左括号是value,等会用get()方法的时候就能输出value了
map.put('}', '{' );
map.put(']', '[' );
for(char c:s.toCharArray()) {
if(c=='(' || c=='{' || c=='[') {
sk.push(c);
}else {
if(sk.isEmpty() || map.get(c)!=sk.pop())
return false;
}
}
if(sk.isEmpty())
return true;
return false;
}
}
看到一个代码思路不用map,直接存右括号匹配,非常巧妙,mark一下
public boolean isValid(String s) {
if(s.isEmpty())
return true;
Stack<Character> stack=new Stack<Character>();
for(char c:s.toCharArray()){
if(c=='(')
stack.push(')');
else if(c=='{')
stack.push('}');
else if(c=='[')
stack.push(']');
else if(stack.empty()||c!=stack.pop())
return false;
}
if(stack.empty())
return true;
return false;
}