题目
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
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;
}
};
时间内存开销
来源:oschina
链接:https://my.oschina.net/u/4443770/blog/3164239