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

耗尽温柔 提交于 2020-02-28 06:11:41

题目

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
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;
		}
	};

时间内存开销

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!