20.有效的括号【简单】
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}" 输出:true
示例 3:
输入:s = "(]" 输出:false
提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
代码解析
class Solution {
public boolean isValid(String s) {
int n = s.length();
:获取字符串s
的长度,并将其存储在变量n
中。if (n % 2 == 1) {
:如果字符串的长度是奇数,则:return false;
:返回false
,表示该字符串不是一个有效的括号序列。}
:结束if语句。Map<Character, Character> pairs = new HashMap<Character, Character>() {{
:创建一个新的HashMap,用于存储每个关闭括号与其对应的开放括号的映射关系。put(')', '(');
:将关闭括号)
映射到开放括号(
。put(']', '[');
:将关闭括号]
映射到开放括号[
。put('}', '{');
:将关闭括号}
映射到开放括号{
。}};
:结束HashMap的初始化。Deque<Character> stack = new LinkedList<Character>();
:创建一个新的双端队列(栈),用于存储当前扫描到的开放括号。for (int i = 0; i < n; i++) {
:遍历字符串的每个字符。char ch = s.charAt(i);
:获取当前字符并存储在变量ch
中。if (pairs.containsKey(ch)) {
:如果该字符是一个关闭括号,则:if (stack.isEmpty() || stack.peek() != pairs.get(ch)) {
:如果栈为空,或者栈顶的开放括号与当前关闭括号不匹配,则:return false;
:返回false
,表示该字符串不是一个有效的括号序列。}
:stack.pop();
:从栈中弹出与当前关闭括号匹配的开放括号。} else {
:否则(即当前字符是一个开放括号),则:stack.push(ch);
:将当前开放括号压入栈中。}
}
return stack.isEmpty();
:如果栈为空,则返回true
,表示该字符串是一个有效的括号序列;否则返回false
。}
}
代码【点个赞加个关注吧谢谢】
import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
class Solution {
public boolean isValid(String s) {
int n =s.length();
if(n % 2 == 1){
return false;
}
Map<Character, Character> pairs = new HashMap<Character, Character>() {{
put(')','(');
put(']','[');
put('}','{');
}};
Deque<Character> stack = new LinkedList<Character>();
for (int i = 0; i < n; i++) {
char ch = s.charAt(i);
if (pairs.containsKey(ch)){
if (stack.isEmpty() || stack.peek()!=pairs.get(ch)){
return false;
}
stack.pop();
}else {
stack.push(ch);
}
}
return stack.isEmpty();
}
}