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

有效字符串需满足:

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

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

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

示例 1:

输入: "()"

输出: true

示例 2:

输入: "()[]{}"

输出: true

示例 3:

输入: "(]"

输出: false

示例 4:

输入: "([)]"

输出: false

示例 5:

输入: "{[]}"

输出: true

思路1 list 模拟栈,只能在栈顶进行入栈和出栈

思路2 使用Stack栈

Java版(思路1)

class Solution {
public boolean isValid(String s) {
boolean flag = true;
List<String> list = new ArrayList<>();
for(int i=0;i<s.length();i++) {
String temp = s.substring(i, i+1);
if( temp.equals("(") || temp.equals("[") || temp.equals("{")) {
//System.out.println("add---"+temp);
list.add(temp);
}else if(temp.equals(")")) {
if(list.size()>0 && list.get(list.size()-1).equals("(")) {
//System.out.println("delete---"+list.get(list.size()-1));
list.remove(list.size()-1);
}else {
flag = false;
break;
}
}else if(temp.equals("]")) {
if(list.size()>0 && list.get(list.size()-1).equals("[")) {
//System.out.println("delete---"+list.get(list.size()-1));
list.remove(list.size()-1);
}else {
flag = false;
break;
}
}else if(temp.equals("}")) {
if(list.size()>0 && list.get(list.size()-1).equals("{")) {
//System.out.println("delete---"+list.get(list.size()-1));
list.remove(list.size()-1);
}else {
flag = false;
break;
}
}
}
if(flag && list.size()==0) {
//System.out.println(true);
return true;
}else {
//System.out.println(false);
return false;
} }
}

Java版(思路2)

class Solution {
public boolean isValid(String s) {
Stack<String> stack = new Stack<>();
for(int i=0;i<s.length();i++) {
String temp = s.substring(i, i+1);
if(temp.equals("(") || temp.equals("[") || temp.equals("{")) {
stack.push(temp);
}else if(!stack.isEmpty() && temp.equals(")") && stack.pop().equals("(")) {
}else if(!stack.isEmpty() && temp.equals("]") && stack.pop().equals("[")) {
}else if(!stack.isEmpty() && temp.equals("}") && stack.pop().equals("{")) {
}else {
return false;
}
}
if(stack.isEmpty()) {
return true;
}else {
return false;
}
}
}

运行结果

力扣(LeetCode) 20. 有效的括号的更多相关文章

  1. 力扣Leetcode 179. 最大数 EOJ 和你在一起 字符串拼接 组成最大数

    最大数 力扣 给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数. 示例 1: 输入: [10,2] 输出: 210 示例 2: 输入: [3,30,34,5,9] 输出: 9534330 说 ...

  2. 力扣Leetcode 45. 跳跃游戏 II - 贪心思想

    这题是 55.跳跃游戏的升级版 力扣Leetcode 55. 跳跃游戏 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃 ...

  3. Java实现 LeetCode 20 有效的括号

    20. 有效的括号 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. ...

  4. LeetCode 20. 有效的括号(Valid Parentheses)

    20. 有效的括号 20. Valid Parentheses 题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须 ...

  5. 【力扣leetcode】-787. K站中转内最便宜的航班

    题目描述: 有 n 个城市通过一些航班连接.给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 p ...

  6. 力扣Leetcode 面试题56 - I. 数组中数字出现的次数

    面试题56 - I. 数组中数字出现的次数 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 示例 ...

  7. [LeetCode] 20. 有效的括号 (栈)

    思路: 首先用字典将三对括号存储,遍历字符串中每个字符,遇到左括号就入栈:遇到右括号就开始判断:是否与栈弹出的顶字符相同. 如果到最后栈被清空,说明全部匹配上了,为真. class Solution( ...

  8. [LeetCode] 20. 有效的括号

    题目链接:https://leetcode-cn.com/problems/valid-parentheses/ 题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串, ...

  9. LeetCode 20. 有效的括号( 括号配对 )

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...

  10. Leetcode 20.有效的括号 By Python

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...

随机推荐

  1. php的serialize()函数和unserialize()函数

    适用情境:serialize()返回字符串,此字符串包含了表示value的字节流,可以存储于任何地方.这有利于存储或传递 PHP 的值,同时不丢失其类型和结构.比较有用的地方就是将数据存入数据库或记录 ...

  2. Django XSS攻击

    Django XSS攻击 XSS(cross-site scripting跨域脚本攻击)攻击是最常见的web攻击,其特点是“跨域”和“客户端执行”,XSS攻击分为三种: Reflected XSS(基 ...

  3. Redis随笔-rename效率问题

    背景 rename是redis中给key重命名命令,rename key newkey的意思就是将key重命名为newkey.大部分文档在介绍rename的时候只将它描述成一个时间复杂度为O(1)的命 ...

  4. [c/c++] programming之路(4)、常量和变量

    一.打开多个程序(温习) #include<stdio.h> #include<stdlib.h> void main(){ ; ]; scanf("%d" ...

  5. Stanford CS231n实践笔记(课时22卷积神经网络工程实践技巧与注意点 cnn in practise 上)

    本课主要2个实践内容: 1.keras中数据集丰富,从数据集中提取更多特征(Data augmentation) 2.迁移学习(Tranform learning) 代码:https://github ...

  6. 20165310 《Java程序设计》课程总结

    20165310 <Java程序设计>课程总结 一.每周作业及实验报告博客链接汇总 预备作业一:我期望的师生关系 20165310 我期望的师生关系 预备作业二:学习基础和C语言基础调查 ...

  7. 使用注释来解决关于inline-block元素换行问题

    昨天群里有人问个问题:为什么button加了文字后,产生了对齐不一致的问题. 原因在于baseline的对齐问题. 然后就有人推荐了一篇文章:关于Vertical-Align你需要知道的事情 其中里面 ...

  8. 单用户模式破解root密码

  9. 配置maven默认jdk版本

    1.在setting.xml中配置.对所有通过该配置文件构建的maven项目有效. <profile> <id>jdk-1.8</id> <activatio ...

  10. Navicat for MySQL安装工具及破解工具

    链接: http://pan.baidu.com/s/1i500eEh 密码: 9s26