leetcode 20 有效的括号

匿名 (未验证) 提交于 2019-12-02 23:26:52

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true

分析过程:
检验括号是否匹配的方法用“期待的急迫程度”这个概念来描述。
分析可能出现的不匹配的情况:
1、到来的右括弧非是所“期待”的;[ ( ] )
2、到来的是“不速之客” ( ( ) ] )
3、直到结束,也没有到来所“期待”的 ( [ ( ) )
算法设计思想:
1、凡出现左括弧,则进栈;
2、凡出现右括弧,首先检查栈是否空
若栈空,则表明“右括弧”多了
否则和栈顶元素比较,
若相等,则“左括弧出栈”
否则不匹配
3、表达式检验结束时,
若栈空,则匹配正确
否则表明“左括弧”多了
代码中遇到的问题:
peek()方法: 查看栈顶对象而不移除它
java里Stack的peek方法是返回栈顶的元素但不移除它。但Stack的pop方法是会移除的
ToCharArray( ):将字符串对象中的字符转换为一个字符数组。
length和length()的区别
length返回数组的长度,length()返回字符串的长度
String s=“adfjsdfj”;
int a=s.length();
这个可以获取到字符串的长度!
int[] arr={3,5,7,8,9,10};
int b=arr.lenth;
//这个可以获取到数组的长度!

代码:

class Solution {     public boolean isValid(String s) {         Stack<Character> stack=new Stack<>();         char[] chs=s.toCharArray();         int len=chs.length;         if((len%2)==1) return false;         for(int i=0;i<len;i++){             if(stack.isEmpty()||!isMatch(stack.peek(),chs[i]))                 stack.push(chs[i]);             else                 stack.pop();         }         return stack.isEmpty();     }     public boolean isMatch(char a,char b){         switch(a){                 case'(':if(b==')') return true; else return false;                 case'{':if(b=='}') return true; else return false;                 case'[':if(b==']') return true; else return false;             default:return false;         }     } }
转载请标明出处:leetcode 20 有效的括号
文章来源: https://blog.csdn.net/weixin_43443278/article/details/88854942
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!