括号匹配-算法详细题解LeetCode
2024-10-09 04:56:10
题目:有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
/**
* @author cosefy
* @date 2020/6/8
*/
public class ValidParenthesis {
public static void main(String[] args) {
String s = "";
System.out.println(s);
boolean b = isValid_Test1(s);
boolean b = isValid_Test2(s);
System.out.println("结果是: " + b);
}
//解法一:采用栈的辅助
/*
思路:循环遍历字符串,遇到左括号就压栈,否则就出栈,出栈时判断栈是否为空,遍历结束后,记得判断栈空。
分析:一趟遍历,时间复杂度为O(n)
易错点:注意栈空的判断
思考:
-执行用时很少,但内存消耗有点多,考虑是否有办法节约内存。
-可以判断字符串的长度是否为0或者为奇数,直接返回结果
*/
public static boolean isValid_Test1(String s) {
if (s.length() == 0)
return true;
if (s.length() % 2 != 0)
return false;
Stack<Character> stack = new Stack<>();
for (char c : s.toCharArray()) {
if (c == '(' || c == '{' || c == '[') {
stack.push(c);
} else {
if (stack.isEmpty())
return false;
char cc = stack.pop();
if ((cc == '(' && c != ')') || (cc == '{' && c != '}') || (cc == '[' && c != ']'))
//上述判断语句也可用HashMap存储三对括号来查询实现。
return false;
}
}
return stack.isEmpty();
}
//解法二:数组辅助实现
/*
思路:开辟一个数组存放字符,利用一个变量来访问数组,若遍历到左括号,变量自加1,否则变量自减1,
分析:此方法相对来说用时更少。
*/
public static boolean isValid_Test2(String s) {
if (s.length() == 0)
return true;
if (s.length() % 2 != 0)
return false;
char[] chars = new char[s.length()];
int index = -1;
for (char c : s.toCharArray()) {
if (c == '(' || c == '{' || c == '[') {
index++;
chars[index]=c;
}else {
if(index==-1)
return false;
if(c==')'&&chars[index]=='('||
c=='}'&&chars[index]=='{'||
c==']'&&chars[index]=='[')
index--;
}
}
return index==-1;
}
}
最新文章
- 笔记本双系统XP与Ubuntu,重装XP后如何恢复grup引导,另附操作系统启动过程
- Windows Desktop 调用 WinRT api
- Oracle Temp表空间切换
- Add and Search Word - Data structure design
- springMVC+ibatis数据持久化入门级学习例子
- CSS基础(03)
- Scut:SocketListener 的解析
- hash算法-time33算法
- hdu 1355 The Peanuts
- javascript 实现一个网页,然后计算出有多少剩余时间的倒计时程序
- ES6中的类和继承
- Laravel + go-micro + grpc 实践基于 Zipkin 的分布式链路追踪系统 摘自https://mp.weixin.qq.com/s/JkLMNabnYbod-b4syMB3Hw?
- MySQL把文件导入表中
- 20144303石宇森《网络对抗》MSF基础应用
- Autotools使用流程【转】
- phonegap 2.9 IOS Xcode 搭建环境
- Win(Phone)10开发第(5)弹,本地媒体服务器的一些注意事项
- python升级带来的yum异常:File ";/usr/bin/yum";, line 30
- 【洛谷】P1176: 路径计数2【递推】
- activemq整合springboot使用(个人微信小程序用)