分析
這題早在 1989 出版的 C 名題精選百則就有了(問題6-1 括號匹配問題),不過當時冼鏡光老師給出的範例只有小括號「( )」, LeetCode 版多出了中括號「[ ]」與大括號「{ }」(強國叫花括號),不過解法仍然是使用 stack。
這一題小弟 10 年前不看解答第一次就做對了,這次也是一次成功。這一題很適合用來面試,如果有人連這麼簡單的題目都答錯那也太...
class Solution {
public:
bool isValid(string s) {
vector<char> stack;
stack.reserve(s.size());
for(int i = 0; i < s.size(); ++i){
switch(s[i]){
case '(':
case '[':
case '{':
stack.push_back(s[i]);
break;
case ')':
if(stack.empty() || stack.back() != '(')
return false;
stack.pop_back();
break;
case ']':
if(stack.empty() || stack.back() != '[')
return false;
stack.pop_back();
break;
case '}':
if(stack.empty() || stack.back() != '{')
return false;
stack.pop_back();
break;
}
}
return (stack.empty());
}
};
沒有留言:
張貼留言