题目:

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:
输入: "()"
输出: true

示例 2:
输入: "()[]{}"
输出: true

示例 3:
输入: "(]"
输出: false

示例 4:
输入: "([)]"
输出: false

示例 5:
输入: "{[]}"
输出: true

思路:

  我思路比较简单,就是从左往右看

  如果是 "(" "{" "[" 这三个的话,直接进入队列中

  如果遇到 ")" "}" "]" 这三个的话,就去看队列中的最后一个是不是和他匹配,如果是,那就移除最后一个,如果不是,那就直接跳出循环,肯定就不是一个合格的括号啦~(这时候队列里面还有没有匹配上的括号)

  tips:可以在最开始加个判断,如果是奇数,就肯定是不合格的括号~

代码如下:

    public static boolean isValid(String s) {
if (s.length() % 2 == 1) {
return false;
}
Map<String, String> map = new HashMap<String, String>();
map.put(")", "(");
map.put("}", "{");
map.put("]", "["); int i = 0;
Deque<String> queue = new LinkedList<String>();
while(i < s.length()) {
String now = s.substring(i, i+1);
if (!queue.isEmpty() && map.containsKey(now)) {
if (queue.getLast().equals(map.get(now))) {
queue.removeLast();
} else {
break ;
} } else {
queue.offer(now);
}
i++;
} if (queue.isEmpty()) {
return true;
} else {
return false;
}
}

括号匹配问题 —— Deque双端队列解法的更多相关文章

  1. deque双端队列容器

    //deque双端队列容器 //deque双端队列容器与vector一样,采用线性表顺序存储结构,但与vector不同的是, //deque采用的分块线性存储结构来存储数据,每块的大小一般为512字节 ...

  2. deque双端队列笔记

    clear()clear()clear():清空队列 pushpushpush_back()back()back():从尾部插入一个元素. pushpushpush_front()front()fro ...

  3. 算法-deque双端队列

    Python的deque模块,它是collections库的一部分.deque实现了双端队列,意味着你可以从队列的两端加入和删除元素 1.基本介绍 # 实例化一个deque对象d = deque()d ...

  4. Java 集合深入理解(10):Deque 双端队列

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 什么是 Deque Deque 是 Double ended queue (双端队列) 的缩写,读音和 deck 一样,蛋 ...

  5. c++ deque 双端队列

    双端队列: 函数 描述 c.assign(beg,end)c.assign(n,elem)  将[beg; end)区间中的数据赋值给c.将n个elem的拷贝赋值给c. c.at(idx)  传回索引 ...

  6. stl之deque双端队列容器

    deque与vector很相似,不仅能够在尾部插入和删除元素,还能够在头部插入和删除. 只是当考虑到容器元素的内存分配策略和操作性能时.deque相对vector较为有优势. 头文件 #include ...

  7. STL容器:deque双端队列学习

    所谓deque,是"double-ended queue"的缩写; 它是一种动态数组形式,可以向两端发展,在尾部和头部插入元素非常迅速; 在中间插入元素比较费时,因为需要移动其它元 ...

  8. deque(双端队列)

    deque 是对queue的改进,增加了 push_front 和 pop_front 函数 , 和 双向链表作用差不多: 这里就不多讲了.可以参考: List(双向链表)

  9. STL标准库-容器-deque 双端队列

    头文件: #include<deque> 常用操作: https://www.cnblogs.com/LearningTheLoad/p/7450948.html

随机推荐

  1. oracle取前10条记录

    --oracle取前十条数据 --(1)第一种 ; --(2)第二种 ;

  2. mariadb galera群集故障记录

    负责galera上执行删除语句 delete from t1 where group_id= and group_id=; 执行后,群集破坏,除了主节点存活,其他俩个节点全都停掉. 查看galera的 ...

  3. python3 selenium模块Chrome设置代理ip的实现

    python3 selenium模块Chrome设置代理ip的实现 selenium模块Chrome设置代理ip的实现代码: from selenium import webdriver chrome ...

  4. 001 centos7下安装kibana

    Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索.查看交互存储在Elasticsearch索引中的数据. 所以,在安装完ES之后,这里再安装一下kibana.方便后面学 ...

  5. 表单在ios下输入框必须重压或长按才能唤起软键盘

    解决方案: 一.在node_module里找到fastClick文件,然后找到focus方法,加一句focus方法即可解决:FastClick.prototype.focus = function(t ...

  6. Android studio -SVN 使用笔记

    1.Android studio 安装 中文组官网:http://www.android-studio.org/ 常见问题参考: 分支冲突合并 http://blog.csdn.net/tearsmo ...

  7. Visual Studio 2019更新到16.2.1

    Visual Studio 2019更新到16.2.1   此次更新,包含以下修改: (1)支持Xcode 10.3. (2)修复了Forms项目中,预览Android界面效果bug. (3)修复am ...

  8. shell编程系列4--有类型变量:字符串、只读类型、整数、数组

    shell编程系列4--有类型变量:字符串.只读类型.整数.数组 有类型变量总结: declare命令和typeset命令两者等价 declare.typeset命令都是用来定义变量类型的 decla ...

  9. pytorch标准化后的图像数据如果反标准化保存

    1.数据处理代码utils.py: 1) # coding:utf- import os import torch.nn as nn import numpy as np import scipy.m ...

  10. 如何做ui自动化---步骤详解

    第一步: 得到功能测试的常规用例,查看是否可以进行自动化,要明确,自动化不是为了自动化而自动化,自动化是节省人力,主要做回归测试,如果变动性特别大,不建议做自动化,具体可查看其它文章“什么适合做自动化 ...