zoukankan      html  css  js  c++  java
  • 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 };
  • 相关阅读:
    线程池中的scheduleAtFixedRate scheduleWithFixedDelay区别
    几道MySQL问题
    【SQL server 2012】复制数据库到另一台机器上
    LeetCode 98. 验证二叉搜索树
    深度学习知识点
    Graph Network Notes
    剑指 Offer 33. 二叉搜索树的后序遍历序列
    剑指 Offer 29. 顺时针打印矩阵
    LeetCode 54. 螺旋矩阵
    LeetCode 50. Pow(x, n)
  • 原文地址:https://www.cnblogs.com/grooovvve/p/11247649.html
Copyright © 2011-2022 走看看