括号匹配-算法详细题解LeetCode
题目:有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 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的更多相关文章
- Python凯撒密码和括号匹配
		
1.凯撒密码: 除了特殊字符不转化,其余的按照规定经行转译,以下以a~z和A~Z的字符都进行转译. plaincode = input("")print(len(plaincode ...
 - 《LeetBook》leetcode题解(20):Valid Parentheses[E]——栈解决括号匹配问题
		
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
 - LeetCode 20 Valid Parentheses (括号匹配问题)
		
题目链接 https://leetcode.com/problems/valid-parentheses/?tab=Description Problem: 括号匹配问题. 使用栈,先进后出! ...
 - 括号匹配(POJ2955)题解
		
原题地址:http://poj.org/problem?id=2955 题目大意:给出一串括号,求其中的最大匹配数. 我这么一说题目大意估计很多人就蒙了,其实我看到最开始的时候也是很蒙的.这里就来解释 ...
 - LeetCode 第20题--括号匹配
		
1. 题目 2.题目分析与思路 3.代码 1. 题目 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭 ...
 - HDU 4283 You Are the One ★(进出栈的括号匹配性质:区间DP)
		
题意 有一个队列,每个人有一个愤怒值D,如果他是第K个上场,不开心指数就为(K-1)*D.但是边上有一个小黑屋(一个FILO堆栈),可以一定程度上调整上场程序,求一种安排上场方案使得所有人的不开心指数 ...
 - [ZPG TEST 114] 括号匹配【树分治 点分治 括号序列】
		
1. 括号匹配 有一棵树,每个节点上都有一个括号(左括号或者右括号).有多少个有序点对(u, v)从u到v的路径上的节点构成的字符串是一个合法的括号匹配?(我们称这样的点对是合法的) 输 ...
 - YTU 3003: 括号匹配(栈和队列)
		
3003: 括号匹配(栈和队列) 时间限制: 1 Sec 内存限制: 128 MB 提交: 2 解决: 2 [提交][状态][讨论版] 题目描述 假设一个表达式中只允许包含三种括号:圆括号&quo ...
 - NYOJ 题目15 括号匹配(二)(区间DP)
		
点我看题目 题意 : 中文题不详述. 思路 : 本来以为只是个小模拟,没想到是个区间DP,还是对DP不了解. DP[i][j]代表着从字符串 i 位置到 j 位置需要的最小括号匹配. 所以初始化的DP ...
 
随机推荐
- spark机器学习从0到1特征选择-卡方选择器(十五)
			
一.公式 卡方检验的基本公式,也就是χ2的计算公式,即观察值和理论值之间的偏差 卡方检验公式 其中:A 为观察值,E为理论值,k为观察值的个数,最后一个式子实际上就是具体计算的方法了 n 为总 ...
 - ios]企业开发者账号申请
			
1. 先打电话到“华夏邓白氏公司”(上海:400-820-3536 北京:400-810-3531 广州:800-830-9032),我打的是北京分部的电话,就说自己因为申请apple开发者账号,需要 ...
 - 51Nod栈
			
LYK有一个栈,众所周知的是这个数据结构的特性是后进先出的. LYK感觉这样子不太美妙,于是它决定在这个前提下将其改进,也就是说,每次插入元素时,可以在栈顶或者栈底插入,删除元素时,只能在栈顶删除.L ...
 - 【python爬虫】scrapy入门4--添加cookies
			
(1) settings.py 取消注释:COOKIES_ENABLED = True (2)爬虫xx.py def parse(self, response): c_dic = {自己抓包} # 获 ...
 - PHP目录操作函数汇总
			
一.判断普通文件和目录 1.is_file()//判断给定文件名是否为一个正常的文件 2.is_dir()//判断给定文件名是否是一个目录二.文件的属性 1.file_exists( ...
 - css3新选择
			
官方解释: [attribute^=value],a[src^="https"],选择其 src 属性值以 "https" 开头的每个 <a> 元素 ...
 - GC总结
			
概述 GC(Garbage Collection),需要完成的3件事 哪些内存需要回收? 什么时候回收? 如何回收? 为什么需要了解GC和内存分配?更好的监控和调节 排查各种内存溢出,内存泄漏 避免G ...
 - 【JavaScript数据结构系列】03-队列Queue
			
[JavaScript数据结构系列]03-队列Queue 码路工人 CoderMonkey 转载请注明作者与出处 1. 认识队列Queue结构 队列,跟我们的日常生活非常贴近,我们前面举例了食堂排队打 ...
 - Python学习之路【第一篇】:Python简介与入门
			
Python简介 一.什么是Python Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言 ...
 - [Firefox附加组件]0003.弹出对话框
			
Firefox中使用面板(panel)模块来显示弹出对话框,面板的内容通过HTML编写.你可以在面板上运行content script,尽管在面板里的脚本无法直接访问插件代码,但是你可以在面板脚本和插 ...