题目介绍:
给定一个只包括 `'('` , `')'` , `'{'` , `'}'` , `'['` , `']'` 的字符串,判断字符串是否有效。有效字符串需满足:
1. 左括号必须用相同类型的右括号闭合。
2. 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
#include <iostream>
#include <stack>
using namespace std;
/*
* 设计思路:
* 借助栈先进后出的特性
*
*
*
*/
class Solution
{
public:
bool isValid(string s)
{
stack<char> judge;
for(int i = 0; i < s.length(); i++)
{
if(!judge.empty())
{
if(s[i] == '(' || s[i] == '[' || s[i] == '{')
{
judge.push(s[i]);
}
else if(s[i] == ')')
{
if(judge.top() == '(')
{
judge.pop();
}
else
{
return false;
}
}
else if(s[i] == ']')
{
if(judge.top() == '[')
{
judge.pop();
}
else
{
return false;
}
}
else if(s[i] == '}')
{
if(judge.top() == '{')
{
judge.pop();
}
else
{
return false;
}
}
}
else
{
judge.push(s[i]);
}
}
return judge.empty();
}
};
int main()
{
string s = "(123456{}1253((2563{223}333)))";
Solution a;
cout << a.isValid(s) << endl;
return 0;
}