题目
输入一个字符串,其中包含 [](){}
六种括号,请你判断这个字符串组成的括号是否合法。
示例
Input: "()[]{}"
Output: true
Input: "([)]"
Output: false
Input: "{[]}"
Output: true
思路:
使用栈先进后出的特征在栈顶匹配
解法:
#include <string>
#include <stack>
#include <iostream>
using namespace std;
char check(char ch)
{
if (ch == '(') return ')';
if (ch == '[') return ']';
if (ch == '{') return '}';
return ch;
}
bool isMatch(string & s)
{
if(s.size() == 0) return true;
stack<char> data;
int i = 0;
while(s[i] != '\0')
{
if (s[i] == '{' || s[i] == '[' || s[i] == '(')
{
data.push(s[i]);
}
i++;
while (!data.empty() && i < s.size())
{
if (s[i] == '}' || s[i] == ']' || s[i] == ')')
{
if (data.empty()) break;
char ch = data.top();
if (check(ch) == s[i++])
{
data.pop();
}
else
{
return false;
}
}
else
{
break;
}
}
}
return data.empty();
}
int main()
{
char* str = "{[]}([()])";//"abc{{{dd[[ff()fa]b]}}} badfd {[adfa(df)d]}";
string s = str;
cout << boolalpha << isMatch(s) << endl;
return 0;
}
说明
- std::boolalpha 可以直接输出bool 型变量的值(true/false)
- std::noboolalpha 将bool型变量转为整形输出