力扣 20. 有效的括号 难度:简单

题目

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
 

示例 1:

输入:s = "()"
输出:true
示例 2:

输入:s = "()[]{}"
输出:true
示例 3:

输入:s = "(]"
输出:false
示例 4:

输入:s = "([)]"
输出:false
示例 5:

输入:s = "{[]}"
输出:true
 

提示:

1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses


 

题解思路

这道题最好的思路是用栈解,首先需要把给的字符串转换成字符数组,然后对这个字符数组进行遍历,如果当前遍历的字符括号与栈顶元素不匹配,则加入到栈中,匹配则删除栈顶元素,遍历结束如果栈为空则所有括号匹配。

 


 

代码

 1 class Solution {
 2     public boolean isValid(String s) {
 3         char[] ss = s.toCharArray();
 4         Stack<Character> stack = new Stack();
 5         for(int i=0;i< ss.length;i++){
 6             if(stack.size()!=0){
 7                 if(match(stack.peek(),ss[i])){
 8                     //栈顶元素与遍历元素匹配则删除
 9                     stack.pop();
10                 }else{
11                     stack.push(ss[i]);
12                 }
13             }else{
14                 stack.push(ss[i]);
15             }
16         }
17         if(stack.size() == 0){
18             return true;
19         }else{
20             return false;
21         }
22     }
23     public boolean match(char a,char b){
24         if(a == '('){
25             if(b == ')'){
26                 return true;
27             }else{
28                 return false;
29             }
30         }else if(a == '{'){
31              if(b == '}'){
32                 return true;
33             }else{
34                 return false;
35             }
36         }else if(a == '['){
37              if(b == ']'){
38                 return true;
39             }else{
40                 return false;
41             }
42         }
43         return false;
44     }
45 }

 

posted @ 2021-12-24 14:50  宗神一  阅读(36)  评论(0编辑  收藏  举报