有效的括号(力扣)——基于数组的栈

题目

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
1、左括号必须用相同类型的右括号闭合。
2、左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses

样例输入输出

思路

一看到这道题第一想法就是利用栈来实现
首先判断字符串长度,为奇数,就直接返回false。
然后来判断如果字符串第一个就是)}]这三个,也是直接返回false。
然后才开始栈的相关操作,
首先建立一个自己的栈
`stack<char> mystack;`
然后依次循环,如果是左边的(这个方向的三个,就进行入栈操作`mystack.push(s[i]);`
如果是右边的,就访问栈顶元素`mystack.top();`,进行匹配,如果匹配成功就弹出栈顶元素`mystack.pop();`。如果不成功就接着入栈。
最后来判断,栈是否为空,来判断是否匹配
`if(mystack.empty())`为空的情况,`if(!mystack.empty())`不为空的情况

代码实现

	class Solution {
	public:
	bool isValid(string s) {
			stack<char> mystack;
			int l=s.length();
			if(l%2!=0) return false;
			if(s[0] == ')' || s[0]  == ']' || s[0]  == '}')  return false;
			for(int i=0;i<l;i++)
			{
				if(s[i]=='{'||s[i]=='['||s[i]=='(') mystack.push(s[i]);
				if(s[i]=='}')
				{
					if(mystack.top()=='{')  mystack.pop();
					else mystack.push(s[i]);
				}
				if(s[i]==']')
				{
					if(mystack.top()=='[') mystack.pop();
					else mystack.push(s[i]);
				}
				if(s[i]==')')
				{
					if(mystack.top()=='(') mystack.pop();
					else mystack.push(s[i]);
				}
			}
	if(mystack.empty()) return true;
	else return false;
		}
	};

时间内存开销

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值