20. 有效的括号
2023-04-18 16:11:28 时间
思路:
1,这里利用了一个与运算排除所有奇数长度字符串 2,利用栈来回显前一个元素,每次栈不为空,我们再次入栈时候判断下括号是否成对即可,另外因为我们是拿后面元素和前面元素匹配,因此要注意peek拿的是左括号,当前字符应该是右括号
代码:
class Solution {
public boolean isValid(String s) {
//如果长度是奇数
if ((s.length() & 1) == 1) {
return false;
}
//向栈内加数据相同的取数据
Stack<Character> stack = new Stack<Character>();
for (char c : s.toCharArray()) {
if (stack.isEmpty()) {
stack.push(c);
} else {
if (equalCheck(c, stack.peek())) {
stack.pop();
} else {
stack.push(c);
}
}
}
return stack.isEmpty();
}
private boolean equalCheck(char c, Character peek) {
return c == ')' && peek == '('
|| c == ']' && peek == '['
|| c == '}' && peek == '{';
}
}
也有人用hash先存了值,进行匹配,咱们也写下这种写法
class Solution {
public boolean isValid(String s) {
Map<Character,Character> map=new HashMap<Character,Character>(8) {
{
put(')','(');
put(']','[');
put('}','{');
}
};
//如果长度是奇数
if ((s.length() & 1) == 1) {
return false;
}
//向栈内加数据相同的取数据
Stack<Character> stack = new Stack<Character>();
for (char c : s.toCharArray()) {
if (stack.isEmpty()) {
stack.push(c);
} else {
if (stack.peek().equals(map.get(c))) {
stack.pop();
} else {
stack.push(c);
}
}
}
return stack.isEmpty();
}
}
不过貌似结果并不如何,快的是第一种
相关文章
- Kafka全面认知
- Redis 解密
- Redis常见面试题
- Redis发布订阅模式
- 【多轮对话】任务型多轮对话数据集如何采集
- Hibernate H2 数据库连接配置 URL 解读
- 制作一个Android Sqlite远程运维小工具
- 【数据分享】某产品付费用户数据
- R语言STAN贝叶斯线性回归模型分析气候变化影响北半球海冰范围和可视化检查模型收敛性
- 漏洞复现 -- Redis漏洞总结
- eos源码赏析(十三):EOS智能合约数据持久化存储(上)
- eos源码赏析(十四):EOS智能合约数据持久化存储(下)
- eos源码赏析(十六):EOS智能合约数据表查询
- eos源码赏析(十九):EOS智能合约之合约中数据表中RAM的使用
- 基于eos的Dapp开发--元素战争(二)
- 基于eos的Dapp开发--元素战争(四)
- eos源码赏析(二十四):主网数据同步及落库MongoDB
- iOS第三方数据库FMDB使用方法
- EOS行为核心:解析插件chain_plugin
- 一次C++伪“内存泄漏”的排查之旅