目录
题目:
1. 思路
2. 解题方法
3. 复杂度
4. Code
题目:
给定一个只包括
'('
,')'
,'{'
,'}'
,'['
,']'
的字符串s
,判断字符串是否有效。有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()" 输出:true示例 2:
输入:s = "()[]{}" 输出:true示例 3:
输入:s = "(]" 输出:false提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
1. 思路
我们可以使用栈来解决这个问题。遍历字符串,当遇到左括号时,将其压入栈中;当遇到右括号时,检查栈顶元素是否与其匹配的左括号,如果匹配则将栈顶元素出栈,继续遍历;如果不匹配,则返回 false。最后,如果栈为空,则说明字符串有效,否则返回 false。
2. 解题方法
- 创建一个栈用于存放左括号。
- 遍历字符串 s 中的每个字符:
- 如果是左括号,则将其压入栈中。
- 如果是右括号,则检查栈顶元素是否与其匹配的左括号,如果匹配则将栈顶元素出栈,继续遍历;如果不匹配,则返回 false。
- 最后,如果栈为空,则返回 true,否则返回 false。
3. 复杂度
- 时间复杂度:O(N),其中 N 是字符串 s 的长度。
- 空间复杂度:O(N),最坏情况下,栈中会存放所有的左括号。
4. Code
import java.util.Stack;
class Solution {
public boolean isValid(String s) {
// 创建一个栈用于存放左括号
Stack<Character> stack = new Stack<>();
// 遍历字符串 s 中的每个字符
for (char c : s.toCharArray()) {
// 如果是左括号,则将其压入栈中
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
} else {
// 如果是右括号
// 检查栈是否为空,如果为空,则返回 false
if (stack.isEmpty()) {
return false;
}
// 获取栈顶元素
char top = stack.pop();
// 检查当前右括号与栈顶元素是否匹配
// 如果不匹配,则返回 false
if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) {
return false;
}
}
}
// 最后,如果栈为空,则返回 true,否则返回 false
return stack.isEmpty();
}
}
这段代码使用了栈来检查字符串中的括号匹配情况,如果匹配则返回 true,否则返回 false。
欢迎大家评论区讨论。
(一份比较早的面试宝典,有兴趣的可以私信我领取!!!免费滴)