题目链接
https://leetcode.com/problems/valid-parentheses/
知识点:
考察栈的相关知识
思路:
遍历括号字符串序列,遇到左方向的括号就入栈,遇到右方向的括号时,如果与此时的栈顶元素相匹配,就出栈,否则代表出错,后面就不需要再匹配了。然后继续遍历序列直到结束,如果与当时栈顶元素不匹配或者最后栈不为空,代表false,否则就是代表有效的字符串序列。
AC代码:
class Solution
{
public:
bool isValid(string s)
{
stack<char> stack;
for(int i=0; i<s.size(); i++)
{
if(s[i]=='('||s[i]=='{'||s[i]=='[')
stack.push(s[i]);
else
{
if(stack.size()==0)
return false;
char c = stack.top();
stack.pop();
char match;
switch(s[i])
{
case ')':
match = '(';
break;
case ']':
match='[';
break;
case '}':
match='{';
break;
}
if(c!=match)
return false;
}
}
if(stack.size()!=0)
return false;
return true;
}
};
AC代码加测试如下:
#include<iostream>
#include<string>
#include<stack>
typedef long long LL;
using namespace std;
class Solution
{
public:
bool isValid(string s)
{
stack<char> stack;
for(int i=0; i<s.size(); i++)
{
if(s[i]=='('||s[i]=='{'||s[i]=='[')
stack.push(s[i]);
else
{
if(stack.size()==0)
return false;
char c = stack.top();
stack.pop();
char match;
switch(s[i])
{
case ')':
match = '(';
break;
case ']':
match='[';
break;
case '}':
match='{';
break;
}
if(c!=match)
return false;
}
}
if(stack.size()!=0)
return false;
return true;
}
};
int main()
{
string str;
while(cin>>str)
{
if(Solution().isValid(str))
cout<<"合法字符串!"<<endl;
else
cout<<"非法字符串!"<<endl;
}
return 0;
}