题目:

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

有效字符串需满足:

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

示例 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. PCA python 实现

    PCA 实现: 参考博客:https://blog.csdn.net/u013719780/article/details/78352262 from __future__ import print_ ...

  2. Nutch、Scrapy、Lucene、Heritrix、Solr、Sphinx

    Nutch.Scrapy.Lucene.Heritrix.Solr.Sphinx

  3. sass - for循环写法

    如要设置多个li的动画延迟时间时 注:这里选择器要加#{}才行 不然就会编译成: 6.7. 插值语句 #{} (Interpolation: #{}) 通过 #{} 插值语句可以在选择器或属性名中使用 ...

  4. flutter Form表单

    import 'package:flutter/material.dart'; class FormDemo extends StatelessWidget { @override Widget bu ...

  5. TypeScript封装统一操作Mysql Mongodb Mssql的底层类库demo

    /* 功能:定义一个操作数据库的库 支持 Mysql Mssql MongoDb 要求1:Mysql MsSql MongoDb功能一样 都有 add update delete get方法 注意:约 ...

  6. dapperHelper

    public class DapperHelper { /// 数据库连接名 private static string _connection = string.Empty; /// 获取连接名 p ...

  7. k8s记录-kubeadm安装(二)(转载)

    kubeadm安装安装环境(vm6.5下虚拟机3台,centos 7.4):master:10.20.0.191Node1:10.20.0.192Node2:10.20.0.193 1.安装虚拟机,配 ...

  8. Amazon MWS Scratchpad

    https://mws.amazonservices.com/scratchpad/index.html Use this page to test Amazon MWS API request an ...

  9. CA机构介绍(Certificate Authority 域名SSL证书颁发机构)

    SSL证书机构即CA机构的全称为Certificate Authority证书认证中心,只有通过WebTrust国际安全审计认证,根证书才能预装到主流浏览器,成为全球可信的ssl证书颁发机构. HTT ...

  10. 雨幕——RainCurtian

    今天19年10月14日,也不算是个什么特别的日子.不多能让我的这一天变得特殊的,或许就是在今天我开通了我的第一个博客吧.细想过来每一天都是那么的相似,不过是因为有了某些事情,才变得特殊起来,比如新生命 ...