LeetCode20_Valid Parentheses有效的括号(栈相关问题)

题目:

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:

使用栈这个数据结构;

Java实现:

 1 import java.util.Stack;
 2 
 3 class Solution {
 4     public boolean isValid(String s) {
 5         
 6         Stack<Character> stack = new Stack<>();
 7         for (int i = 0; i<s.length(); i++){
 8             char c = s.charAt(i);
 9             if(c == '('||c == '['|| c == '{')
10                 stack.push(c);
11             else{
12                 if(stack.isEmpty())
13                     return false;
14                 char topChar = stack.pop();
15                 if(c==')'&& topChar != '(')
16                     return false;
17                 if(c==']'&& topChar != '[')
18                     return false;
19                 if(c=='}'&& topChar != '{')
20                     return false;
21             }
22         }
23         return stack.isEmpty();
24     }
25 }

C++实现:

 1 class Solution {
 2 public:
 3     bool isValid(string s) {
 4         stack<char> sk;
 5         for(int i = 0; i<s.size();i++)
 6         {
 7             //一旦遇到左括号,就压栈
 8             if(s[i]=='[' || s[i]=='(' || s[i]=='{')
 9                 sk.push(s[i]);
10             else
11             {
12                 //对于只包括各种括号的字符串,如果在此处栈为空
13                 //则必然出现) ] }先于 ( [ {出现的情况,则为false
14                 if(sk.empty())
15                     return false;
16                 // 进行括号匹配,一旦和栈顶不匹配,就返回false
17                 if(s[i]==')' && sk.top()!='(')
18                     return false;
19                 if(s[i]==']' && sk.top()!='[')
20                     return false;
21                 if(s[i]=='}' && sk.top()!='{')
22                     return false;
23                 // 栈顶匹配,出栈
24                 sk.pop();
25             }
26         }
27         //保证栈为空,同时涵盖空字符串的情况
28         return sk.empty();
29     }
30 };
原文地址:https://www.cnblogs.com/grooovvve/p/11247649.html