力扣4.18--有效的括号

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。 

 例如: 输入:s = "()" 输出:true    

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

首先,字符串中的括号不匹配有以下几种情况

1、字符串中左方向括号多余,所以不匹配

2、括号没有多余,但是类型不匹配

3、字符串中右方向多余,所以不匹配

栈和队列是STL中的数据结构,容器适配器。

栈是先进后出,队列是先进先出

class Solution
{
public:
	bool isvaild(string s)
	{
		if (s.size() % 2 != 0)return false;
		stack<char>st;
		for (int i = 0; i < s.size(); i++)
		{
			if (s[i] == '(')st.push(')');
			else if (s[i] == '{')st.push('}');
			else if (s[i] == '[')st.push(']');
			else if (st.empty() || st.top() != s[i])return false;  //栈里没有我们要匹配的字符,返回false
			else st.pop();   //st.top==s[i],栈弹出元素
		}
		//遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配
		return st.empty();
	}
};

第一种情况:遍历了所有的字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,return false

第二种情况:如果在字符串匹配的过程中,发现栈里没有我们要匹配的字符

第三种情况:遍历字符串的过程中,栈已经为空了,没有匹配的字符,说明右边库哟好没有对应的左边括号

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值