题干:
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()" 输出: true
示例 2:
输入: "()[]{}" 输出: true
示例 3:
输入: "(]" 输出: false
示例 4:
输入: "([)]" 输出: false
示例 5:
输入: "{[]}" 输出: true
#include<iostream>
#include<stack>
#include<string>
using namespace std;
class Solution
{
public:
bool isValid(string s)
{
if(s == "")
return true;
if(s[0] != '(' && s[0] != '[' && s[0] != '{')
return false;
if(s.length() % 2)
return false;
stack<char>a;
a.push(s[0]);
int i = 1;
char c;
while(i<s.length())
{
if(s[i] == '(' || s[i] == '{' || s[i] == '[')
{
a.push(s[i]);
}
switch(s[i])
{
case '}' : c = a.top();
if(c != '{')
return false;
else
a.pop();
break;
case ']' : c = a.top();
if(c != '[')
return false;
else
a.pop();
break;
case ')' : c = a.top();
if(c != '(')
return false;
else
a.pop();
break;
}
i++;
}
if(a.empty())
return true;
else
return false;
}
};
int main()
{
Solution s;
if(s.isValid("(]"))
{
puts("true");
}
else
puts("false");
}