括号匹配。这题,是大学数据结构的题目吧,栈的题目吧(还有魔王语言、迷宫等,有木有)。因为是写过的题目,所以这次直接在leetcode的网页上面写了。还好还记住了思路,一次过~~
Leetcode的Accepted Solutions Runtime Distribution(2015-06-05)
源码:
bool isValid(string s){
stack<int> myStack;
string::iterator iter = s.begin();
string::iterator iterEnd = s.end();
while (iter != iterEnd)
{
if ('(' == *iter || '[' == *iter || '{' == *iter)//左括号进栈
{
myStack.push(*iter);
iter++;
}
else//遇到右括号了
{
if (!myStack.empty())//遇到右括号了,且栈不为空,有可能是Valid,继续往下
{
if (')' != *iter && myStack.top() == *iter - 2)//非小括号匹配成功,继续扫描
{
myStack.pop();
iter++;
}
else if (')' == *iter && myStack.top() == *iter - 1)//小括号匹配成功,继续扫描
{
myStack.pop();
iter++;
}
else return false;//匹配失败了
}
else return false;//遇到右括号且栈为空,必然匹配不上了
}
}
//走到这里,说明右括号都配对了。
if (iterEnd == iter && myStack.empty())
//如果此时栈不为空,说明没有落单的左括号了,说明字符串完全匹配完毕
{
return true;
}
return false;
}