题目描述:

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

有效字符串需满足:

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

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

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

做法

使用栈来进行辅助求解。

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. 吴裕雄--天生自然 pythonTensorFlow图形数据处理:数据集高层操作

    import tempfile import tensorflow as tf # 1. 列举输入文件. # 输入数据生成的训练和测试数据. train_files = tf.train.match_ ...

  2. 吴裕雄--天生自然 JAVA开发学习:多态

    Parent p = new Child(); public class Test { public static void main(String[] args) { show(new Cat()) ...

  3. Thymeleaf标签学习

    目录 Thymeleaf Thymeleaf的特点 SpringBoot与之整合 Thymeleaf常用语法 变量_变量案列 变量_动静结合 变量_ognl表达式的语法糖 变量_自定义变量 方法 方法 ...

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

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

  5. Chapter1. The Electromagnetic Model (Field and Wave Electromagnetics. Second Edition) David K. Cheng

    1-1 Introduction electric charge n.电荷 vice versa adv. 反之亦然 elastic adj. 弹性的 postulate v.假定 hasten v. ...

  6. NLP-文本分类之开始(0)

    转眼读研一年了,开题也开了,方向也定了,大方向就是NLP,然而从一开始的上课.做项目开题什么的(自己也比较贪玩,以前不打游戏,结果王者上瘾了),到现在对NLP是一知半解,不对,半解都没有半解,然后时间 ...

  7. python学习笔记(18)字典和json 的区别 和转换

    字典和json 的区别 和转换 前言:字典和json非常像.接下来比较一下两者的异同 先看一下字典的写法: a = {'a':'1', 'b':'2', 'c':'3' } 再看一下json的写法: ...

  8. Self-examination

    第一次参加省赛,算是真正感受到比赛的残酷.拿到好成绩,需要平时大量的积累,甚至也需要一点运气,然后我还做的不够,但我觉得我可以做得更好. 我之前是没有任何基础,大一才刚刚从知码开门入门.然后刚开始一直 ...

  9. Tomcat爆出严重漏洞,附影响版本及解决方案

    昨天,群里聊嗨了.大家都在远程办公,却都急急忙忙的升级线上的 Tomcat 版本,原因就是 Tomcat 被曝出了严重的漏洞,几乎涉及到所有的版本. 一.漏洞原理具体来说就是 Apache Tomca ...

  10. Flask的Jinja2模版过滤器

    Jinja2模版过滤器 过滤器是通过管道符号(|)进行使用的,例如:{{ name|length }},将返回name的长度.过滤器相当于是一个函数,把当前的变量传入到过滤器中,然后过滤器根据自己的功 ...