LeetCode题解:Valid Parentheses

题目链接:

Valid Parentheses


题目描述:

Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.


题目解释:

给定一个字符串,这个字符串只包含’(‘,’)’,’[‘,’]’,’{‘,’}’这六个字符,判断输入的字符串是否有效,在这里所谓的有效是指字符串中的括号字符要有一个正确的顺序,比如“( )”,”()[]”,“{}”这样子的顺序是正确的,但是像“(]”,”({)}”则是错误的


解题方案:

这个题目像不像逆波兰表达式?括号必须成对存在,就像我们平时写的表达式一样,”()”之间的子字符串肯定是成对括号,例如”({}[])”,同理 “[]”,”{}”也之间是相同的情况。括号字符满足先进后出的规则。
那么我们用一个栈来存储”(“,”[“,”{“,当遇到”)”时,栈顶元素一定是”)”,否则这个字符串就是无效的,同理”]”,”}”也是相同的处理规则。


代码

class Solution {
public:

bool isValid(string s)
{
  stack<char> st;

  for (int i = 0; i < s.length(); ++i)
  {
    if(s[i] == '(' || s[i] == '{' || s[i] == '[')
    {
      st.push(s[i]);
    }
    else
    {
      if(s[i] == ')')
      {
        if(!st.empty() && st.top() == '(')
        {
          st.pop();
        }
        else
        {
          return false;
        }
      }
      if(s[i] == ']')
      {
        if(!st.empty() && st.top() == '[')
        {
          st.pop();
        }
        else
        {
          return false;
        }
      }
      if(s[i] == '}')
      {
        if(!st.empty() && st.top() == '{')
        {
          st.pop();
        }
        else
        {
          return false;
        }
      }
    }
  }
  if(st.empty())
  {
    return true;
  }
  else
  {
    return false;    
  }
}

};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值