题目:有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。

左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 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;
}
}

最新文章

  1. 笔记本双系统XP与Ubuntu,重装XP后如何恢复grup引导,另附操作系统启动过程
  2. Windows Desktop 调用 WinRT api
  3. Oracle Temp表空间切换
  4. Add and Search Word - Data structure design
  5. springMVC+ibatis数据持久化入门级学习例子
  6. CSS基础(03)
  7. Scut:SocketListener 的解析
  8. hash算法-time33算法
  9. hdu 1355 The Peanuts
  10. javascript 实现一个网页,然后计算出有多少剩余时间的倒计时程序
  11. ES6中的类和继承
  12. Laravel + go-micro + grpc 实践基于 Zipkin 的分布式链路追踪系统 摘自https://mp.weixin.qq.com/s/JkLMNabnYbod-b4syMB3Hw?
  13. MySQL把文件导入表中
  14. 20144303石宇森《网络对抗》MSF基础应用
  15. Autotools使用流程【转】
  16. phonegap 2.9 IOS Xcode 搭建环境
  17. Win(Phone)10开发第(5)弹,本地媒体服务器的一些注意事项
  18. python升级带来的yum异常:File &quot;/usr/bin/yum&quot;, line 30
  19. 【洛谷】P1176: 路径计数2【递推】
  20. activemq整合springboot使用(个人微信小程序用)

热门文章

  1. 一文带你学会国产加密算法SM4的vue实现方案
  2. 视口viewport
  3. java中字符串截取
  4. 复习MintUI
  5. nginx配置之错误和访问日志功能
  6. 王艳 201771010127《面向对象程序设计(java)》第十一周学习总结
  7. CF861D
  8. Centos慢慢长大(一)
  9. SpringCloud(二)- Consul介绍、安装、使用
  10. JUC整理笔记三之测试工具jcstress