题目:有效的括号

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

有效字符串需满足:

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

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

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

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

括号匹配-算法详细题解LeetCode的更多相关文章

  1. Python凯撒密码和括号匹配

    1.凯撒密码: 除了特殊字符不转化,其余的按照规定经行转译,以下以a~z和A~Z的字符都进行转译. plaincode = input("")print(len(plaincode ...

  2. 《LeetBook》leetcode题解(20):Valid Parentheses[E]——栈解决括号匹配问题

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  3. LeetCode 20 Valid Parentheses (括号匹配问题)

    题目链接 https://leetcode.com/problems/valid-parentheses/?tab=Description   Problem: 括号匹配问题. 使用栈,先进后出!   ...

  4. 括号匹配(POJ2955)题解

    原题地址:http://poj.org/problem?id=2955 题目大意:给出一串括号,求其中的最大匹配数. 我这么一说题目大意估计很多人就蒙了,其实我看到最开始的时候也是很蒙的.这里就来解释 ...

  5. LeetCode 第20题--括号匹配

    1. 题目 2.题目分析与思路 3.代码 1. 题目 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭 ...

  6. HDU 4283 You Are the One ★(进出栈的括号匹配性质:区间DP)

    题意 有一个队列,每个人有一个愤怒值D,如果他是第K个上场,不开心指数就为(K-1)*D.但是边上有一个小黑屋(一个FILO堆栈),可以一定程度上调整上场程序,求一种安排上场方案使得所有人的不开心指数 ...

  7. [ZPG TEST 114] 括号匹配【树分治 点分治 括号序列】

    1.      括号匹配   有一棵树,每个节点上都有一个括号(左括号或者右括号).有多少个有序点对(u, v)从u到v的路径上的节点构成的字符串是一个合法的括号匹配?(我们称这样的点对是合法的) 输 ...

  8. YTU 3003: 括号匹配(栈和队列)

    3003: 括号匹配(栈和队列) 时间限制: 1 Sec  内存限制: 128 MB 提交: 2  解决: 2 [提交][状态][讨论版] 题目描述 假设一个表达式中只允许包含三种括号:圆括号&quo ...

  9. NYOJ 题目15 括号匹配(二)(区间DP)

    点我看题目 题意 : 中文题不详述. 思路 : 本来以为只是个小模拟,没想到是个区间DP,还是对DP不了解. DP[i][j]代表着从字符串 i 位置到 j 位置需要的最小括号匹配. 所以初始化的DP ...

随机推荐

  1. Java注解的定义和使用

    注解也叫元数据,一种代码级别的说明.是jdk1.5后产生的一个特性,与类.接口.枚举同一个档次,他可以在包.类.字段.方法.局部变量.方法参数等的前面,用来对这些元素进行说明.注释: <!--m ...

  2. 02 初级版web框架

    02 初级版web框架 服务器server端python程序(初级版): import socket server=socket.socket() server.bind(("127.0.0 ...

  3. Django视图函数之三种响应模式

    视图函数响应处理: from django.shortcuts import render,HttpResponse,redirect (1)render 处理模板文件,可以渲染模板,第一个参数必须为 ...

  4. 201771010128王玉兰《面向对象与程序设计(java)第十五周学习总结》

    第一部分:理论知识 一:JAR文件 Java程序的打包:程序编译完成后,程序员 将.class文件压缩打包为.jar文件后,GUI界面 程序就可以直接双击图标运行. jar文件(Java归档)既可以包 ...

  5. poj1904 完美匹配+Tarjan

      King's Quest Time Limit: 15000MS   Memory Limit: 65536K Total Submissions: 9460   Accepted: 3497 C ...

  6. Mybatis 强大的结果集映射器resultMap

    1. 前言 resultMap 元素是 MyBatis 中最重要最强大的元素.它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC ...

  7. 【github技巧2】下载包加速

    打开代下网站:https://g.widora.cn 直接输入     https开头的github地址 或需下载包地址的链接 获取链接 下载压缩包 备注:压缩包格式为tar,需要解压

  8. SQL——SQL别名、UNION和SELECT INTO

    Alias(别名) - 为列名称和表名称指定别名    语法:表SELECT columnName(s) FROM tableName AS aliasName          列SELECT co ...

  9. 四、Spring-面向切面编程

    内容 面向切面编程基本原理 通过POJO创建切面 使用@AspectJ注解 为AspectJ切面注入依赖 关键词 横切关注点(cross-cutting concern) 继承 (inheritanc ...

  10. Netty学习笔记(番外篇) - ChannelHandler、ChannelPipeline和ChannelHandlerContext的联系

    这一篇是 ChannelHandler 和 ChannelPipeline 的番外篇,主要从源码的角度来学习 ChannelHandler.ChannelHandler 和 ChannelPipeli ...