题目
由于只包含字符的字符串’(‘,’)’,’{‘,’}’,’[‘和’]’,确定输入字符串是有效的。
括号必须关闭以正确的顺序,”()”并且”()[]{}”都是有效的,但”(]”并”([)]”没有效。
思路
首先我想改题目设计的括号种类肯定是可变的,但是每一种符合又是关联的,所以我想到的办法是使用pair来存每一对符号,这样即使增加新的符号同样适用。
所以我是用了unordered_map来存储。
做法如下:
//存储每一对key
static unordered_map<char, char> theMap =
{
{ '(', ')' },
{ '[', ']' },
{ '{', '}' },
{ '<', '>' },
};
//具体的s中的符号不与该函数关联 达到解耦的目的
bool isValid(string s)
{
stack<char> keyStack;
for (auto c : s)
{
//is value
if (theMap.find(c) == theMap.end())
{
if(keyStack.empty())
{
return false;//c为右边 但是左边值为空
}
if (theMap[keyStack.top()] != c)
{
return false;
}
keyStack.pop();
}
else //is key
{
keyStack.push(c);
}
}
return keyStack.empty();
}
目前已验证成立!