有效的括号
给定一个只包括 '(',')','{','}','[',']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = “()
”
输出:true
示例 2:
输入:s = “()[]{}
”
输出:true
示例 3:
输入:s = “(]
”
输出:false
提示:
1
<
=
<=
<= s.length
<
=
<=
<=
1
0
4
10^4
104
s
仅由括号 ‘()[]{}
’ 组成
import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Stack;
class Solution {
public boolean isValid(String s) {
//用于匹配的map,键为左括号,值是右括号
HashMap<Character, Character> hashMap = new HashMap<Character, Character>();
hashMap.put(')', '(');
hashMap.put(']', '[');
hashMap.put('}', '{');
//建栈
Stack<Character> stack = new Stack<>();
for (char c : s.toCharArray()) {
if (stack.isEmpty()) {
stack.add(c);
}
else if (c == '(' || c == '[' || c == '{') {
stack.add(c);
}
else if( !stack.pop().equals(hashMap.get(c))) {
return false;
}
}
if (stack.isEmpty()) {
return true;
}
else {
return false;
}
}
public boolean isValid2(String s) {
while (true) {
//长度
int l = s.length();
s = s.replace("()", "");
s = s.replace("{}", "");
s = s.replace("[]", "");
if (s.length() == l) {
return l == 0;
}
}
}
public boolean isValid3(String s) {
Deque<Character> deque = new LinkedList<>();
char ch;
for (int i = 0; i < s.length(); i++) {
ch = s.charAt(i);
//碰到左括号,就把相应的右括号入栈
if (ch == '(') {
deque.push(')');
}else if (ch == '{') {
deque.push('}');
}else if (ch == '[') {
deque.push(']');
} else if (deque.isEmpty() || deque.peek() != ch) {
return false;
}else {//如果是右括号判断是否和栈顶元素匹配
deque.pop();
}
}
//最后判断栈中元素是否匹配
return deque.isEmpty();
}
}
public class Main {
public static void main(String[] args) {
Solution solution = new Solution();
Boolean result = solution.isValid("()");
System.out.println(result);
}
}
下面是第三种方法:代码随想录提供的解法