题目描述:

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

有效字符串需满足:

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

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

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

做法

使用栈来进行辅助求解。

1、创建一个空栈;

2、使用循环对字符串进行遍历转3,遍历完毕退出循环转7;

3、如果当前字符为'('、'{'、'['则进栈,转2;

4、如果当前字符为')'、'}'、']',转5;

5、如果栈为空,则返回false,匹配不成功,结束程序;栈不空,转6;

6、弹出栈顶元素,如果栈顶元素不是与当前遍历到的字符相匹配的括号,则返回false,匹配不成功,结束程序;否则转2;

7、如果栈为空,则匹配成功,返回true,程序结束;否则返回false,匹配不成功,程序结束。

import java.util.Stack;

class Solution {
public boolean isValid(String s) {
Stack<Character> stack_match = new Stack<Character>();
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='(' || s.charAt(i)=='[' || s.charAt(i)=='{'){
stack_match.push(s.charAt(i));
}else if(s.charAt(i)==')' || s.charAt(i)==']' || s.charAt(i)=='}'){
if(stack_match.isEmpty())
return false;
char current = stack_match.pop(); if(current == '(' && s.charAt(i)!=')')
return false;
if(current == '[' && s.charAt(i)!=']')
return false;
if(current == '{' && s.charAt(i)!='}')
return false;
}
}
if(stack_match.isEmpty())
return true;
return false;
}
}

案例说明

案例1:“( )”

1、创建空栈;

2、对字符串进行遍历;

3、第一个元素是”(” 进栈;当前栈中元素有”(”;

4、第二个元素是”)”,栈非空,弹出栈顶元素;栈顶元素为”(”,与”)”可以匹配;

5、字符串遍历完毕,栈空,返回true

案例2:“{ }[ ]”

1、创建空栈;

2、对字符串进行遍历;

3、第一个元素是”{” 进栈;当前栈中元素有”{”;

4、第二个元素是”}”,栈非空,弹出栈顶元素;栈顶元素为”{”,与”}”可以匹配;

5、第三个元素是”[”,进栈;当前栈中元素有”[”;

6、第二个元素是”]”,栈非空,弹出栈顶元素;栈顶元素为”[”,与”]”可以匹配;

7、字符串遍历完毕,栈空,返回true

案例3:”( ) ) ]”

1、创建空栈;

2、对字符串进行遍历;

3、第一个元素是”(” 进栈;当前栈中元素有”(”;

4、第二个元素是”)”,栈非空,弹出栈顶元素;栈顶元素为”(”,与”)可以匹配;

5、第三个元素是”)”,栈空,返回false,匹配不成功,程序结束。

案例4: ”( ( ( { [ } ] ) )”

1、创建空栈;

2、对字符串进行遍历;

3、第一个元素是”(” 进栈;当前栈中元素有”(”;

4、第二个元素是”(” 进栈;当前栈中元素有”( (”;;

5、第三个元素是”(” 进栈;当前栈中元素有”( ( (”;

6、第四个元素是”{” 进栈;当前栈中元素有”( ( ( {”;

7、第五个元素是”[” 进栈;当前栈中元素有”( ( ( { [”;

8、第六个元素是”}”,栈非空,弹出栈顶元素;栈顶元素为”[”,与”}”不可以匹配,返回false,程序结束。

欢迎关注

扫下方二维码即可关注:

Leetcode 20题 有效的括号(Valid Parentheses) Java语言求解的更多相关文章

  1. LeetCode 20:有效的括号 Valid Parentheses

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. Given a string containing just the characters '(', ' ...

  2. 【leetcode刷题笔记】Longest Valid Parentheses

    Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...

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

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

  4. LeetCode算法题-Min Cost Climbing Stairs(Java实现)

    这是悦乐书的第307次更新,第327篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第176题(顺位题号是746).在楼梯上,第i步有一些非负成本成本[i]分配(0索引). ...

  5. LeetCode算法题-Sum of Left Leaves(Java实现)

    这是悦乐书的第217次更新,第230篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第85题(顺位题号是404).找到给定二叉树中所有左叶的总和.例如: 二叉树中有两个左叶 ...

  6. 32. Longest Valid Parentheses (JAVA)

    Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...

  7. LeetCode算法题-Unique Morse Code Words(Java实现)

    这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...

  8. LeetCode算法题-Robot Return to Origin(Java实现)

    这是悦乐书的第281次更新,第298篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第149题(顺位题号是657).在2D平面上有一个从位置(0,0)开始的机器人.给定其移 ...

  9. LeetCode算法题-Longest Word in Dictionary(Java实现)

    这是悦乐书的第303次更新,第322篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第171题(顺位题号是720).给出表示英语词典的字符串单词数组,找到单词中长度最长的单 ...

随机推荐

  1. 你知道你对 JSON Web Token 的认识存在误解吗

    1.前言 JSON Web Token (JWT) 其实目前已经广为软件开发者所熟知了,但是 JOSE (Javascript Object Signing and Encryption) 却鲜有人知 ...

  2. Rails render collection 的魔法

    都知道的, 在 Rails 的 View 里边渲染集合的时候, 会用到 render 方法参数的 collection 选项 1 <%= render partial: "produc ...

  3. Gym 101987K TV Show Game(2-SAT)

    题目链接:https://vj.z180.cn/b4aacc08fc7aab6ce14e7baf13816c24?v=1571542994 题目要求n个灯(R,B),给出m组赋值方式,每一组中至少有两 ...

  4. elasticsearch 大集群,双重别名,滚动更新分词方案

    elasticsearch 滚动更新分词 国内用ik.hanlp.ansj或基于其二次开发的比较多 必然有分词变更的操作(主要是是加词) reindex+别名可以解决一部分问题,但在大集群上会影响业务 ...

  5. SQL Server Driver for PHP之sqlsrv相关函数

    SQL Server Driver for PHP 包含以下函数: 函数 说明 sqlsrv_begin_transaction 开始事务. sqlsrv_cancel 取消语句:并放弃相应语句的所有 ...

  6. spring02-组件注册-@ComponentScan-自动扫描组件&指定扫描规则

    上一篇我们讲到,讲@Bean注解标在某个方法上,那么ioc容器启动的时候就会将方法返回值放到ioc容器中 在开发中,实际上包扫描用的比较多,接下来我们会介绍两种方式一种是基于xml,一种是基于注解. ...

  7. 【Mongodb】mongoDB与mongoose---Scheme和Collections对应问题

    mongodb是一个基于分布式文件存储的文档型数据库 MongoDB 是一个介于关系数据库和非关系数据库之间的产品 MongoDB 最大的特点是他支持的查询语言非常强大,而且还支持对数据建立索引 官方 ...

  8. 爬虫笔记(三)——HTTP协议请求实战

    如果要进行客户端与服务器端之间的消息传递,我们可以使用HTTP协议请求进行. HTTP协议请求主要分为6种类型,各类型的主要作用如下: GET请求:GET请求会通过URL网址传递信息,可以直接在URL ...

  9. XMemcached 中文api

    变更历史 2010-06-22 添加客户端分布和SASL验证两节,更新spring配置一节. 2010-06-23 添加maven依赖说明 2010-10-17 1.2.6 released 2011 ...

  10. EXAM-2018-08-21

    EXAM-2018-08-21 自己真的是菜的恐怖 D:Fence Building 欧拉公式:V-E+F=2 在平面中:V为顶点个数,E为边数,F为区域数 在简单几何体中:V为顶点个数,E为边数,F ...