Problem:
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.
分析:
运算符匹配问题,使用stack解决。若是(、[、{,则直接入栈;)、]、}则查看是否匹配,匹配继续查看,不匹配直接返回false。最后若stack为空则配对成功。
AC Code(C++):
注意:开始对s使用的是iterator,结果是10ms,改为下标后为2ms,以后要考虑速度的地方可将iter换为下标
同时,此处只有三组配对,故直接列出,若较多可考虑存储map匹配。
class Solution {
public:
//65 / 65 test cases passed.
//Runtime: 2 ms
//开始对s使用的是iterator,结果是10ms,改为下标后为2ms,以后要考虑速度的地方可将iter换为下标
bool isValid(string s) {
if (s.size() % 2 == 1) {//奇数个一定invalid
return false;
}
stack<char> pStack;
for (int i = 0; i < s.size(); ++i) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{') {//直接压入栈
pStack.push(s[i]);
}
else if (!pStack.empty() && ((s[i] == ')' && pStack.top() == '(') || (s[i] == ']' && pStack.top() == '[') || (s[i] == '}' && pStack.top() == '{'))){//是否可匹配
pStack.pop();//可配对,最顶端出栈
}
else{//不可匹配
return false;
}
}
if (pStack.empty()) {
return true;
}
return false;
}
};

本文探讨了如何通过使用栈解决有效括号字符串匹配问题,详细解释了算法原理及实现过程,包括代码示例与优化策略。
1943

被折叠的 条评论
为什么被折叠?



