leetcode第20题有效的括号
时间:2019-10-10
本文章向大家介绍leetcode第20题有效的括号,主要包括leetcode第20题有效的括号使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
package com.lzh.simple;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Stack;
//思路:
//遇到左括号将其进行压栈 遇到右括号则将其进行出站 因为这里涉及到多种括号 所以需要对其进行哈希存储
//每次出栈看看是否和对应的右括号进行匹配 匹配则继续进行 不匹配直接返回false 另外最后如果栈空 那么则是匹配的
//如果栈不为空 那么则证明栈不是匹配的
public class ValidContractDemo20 {
public static boolean isValid(String s){
Map<Character, Character> map = new HashMap<Character, Character>();
//对相应的括号进行键值存储
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
//创建栈
Stack<Character> stack = new Stack<>();
for(int i=0; i<s.length(); i++){//从前向后进行遍历
char c = s.charAt(i);
if(map.containsKey(c)){//如果存在相应的key也就是右括号那么则出栈 如果栈顶元素和键所对应的值不相等 返回false
char top = stack.isEmpty()?'#':stack.pop();
if(top!=map.get(c)){
return false;
}
}else{
stack.push(c);//如果不存在 也就是这时是左括号 那么就将其进行入栈
}
}
return stack.isEmpty();//栈为空 则匹配
}
//测试
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
boolean b = isValid(s);
System.out.println(b);
}
}
原文地址:https://www.cnblogs.com/phantom576/p/11650299.html
- 【设计模式】—— 装饰模式Decorator
- 【设计模式】—— 组合模式Composite
- 【设计模式】—— 桥接模式Bridge
- 【插件开发】—— 1 Eclipse插件开发导盲
- 【插件开发】—— 4 SWT编程须知
- 【插件开发】—— 5 SWT控件以及布局使用
- 【插件开发】—— 6 SWT 复杂控件使用以及布局
- 【插件开发】—— 7 SWT布局详解,不能再详细了!
- 【插件开发】—— 8 IPreferenceStore,插件的键/值存储!
- 【插件开发】—— 9 编辑器代码分块着色-高亮显示!
- 【插件开发】—— 10 JFace开发详解
- 【插件开发】—— 12 GEF入门
- 【插件开发】—— 13 GEF双击模型事件
- 给博客添加节日雪花
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 通过Cloudflare API更新DNS记录
- Vedastr:基于PyTorch的场景文本识别工具箱
- vue-element-admin项目关闭eslint校验
- 搞了半天,终于弄懂了TCP Socket数据的接收和发送,太难~
- 每天一个小技巧:CSS clip-path 的妙用 Clip Path分类Clippy
- 20 个值得学习的 Vue 开源项目
- 小白入门WEB前端编程,必看知识点!核心干货
- 新网站 Robots 和 SiteMap 优化
- Java代理IP池 ( Proxy Pool ) - 改进版
- Lvs+Keepalived 保障HA高可用
- 基于前端JS导出Excel文件(减轻服务端压力)
- 本机IDEA远程调试远端服务器代码
- 开源 - Java接口API授权认证与规范
- 亿及流量多级缓存 - 客户端缓存
- 亿及流量多级缓存 - 一致性哈希负载均衡与模板渲染