LeetCode 20.有效的括号

【题目描述】
给定一个只包含 ’ ( ‘,’ ) ', ’ { ‘,’ } ', ’ [ ‘,’ ] ’ 的字符串,判断字符串是否有效。
有效字符串需满足:
1、左括号必须用相同类型的右括号闭合。
2、左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例1:
输入:“( )”
输出:true

示例2:
输入:“( )[ ]{ }”
输出:true

示例3:
输入:“( ]”
输出:false

示例4:
输入:“( [ ) ]”
输出:false

示例5:
输入:”{ [ ] }“
输出:true

【栈】
所谓栈,就是符合“后进先出”(Last In First Out,LIFO)规则的数据结构,有push和pop两种操作,其中push把元素压入“栈顶”,而pop从栈顶把元素“弹出”。
STL的栈定义在头文件中,可以用“stackst”方式声明一个栈,其中type表明定义类型。

【代码】

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(st.empty()&&(s[i]==')'||s[i]=='}'||s[i]==']'))
			{
				return false;   //栈为空,且s[i]=')','}',']',匹配失败
			}
			else   //栈不为空
			{
				if(s[i]==')'&&st.top()!='(')
					 return false;
				else if(s[i]=='}'&&st.top()!='{')
					return false;
				else if(s[i]==']'&&st.top()!='[')
					 return false;
				else
					st.pop();  //匹配成功,出栈
			}
		}
		if(!st.empty())
			return false;    //循环遍历结束。栈非空,则匹配失败
		return true;         //循环遍历结束。栈空,则匹配成功
	}

};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值