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.
class Solution {
public:
bool isValid(string s) {
stack<char> temp;
for (char& c : s) {
switch (c) {
case '(':
case '[':
case '{':
temp.push(c);
break;
case ')' :
if (temp.empty() || temp.top() != '(')
return false;
else temp.pop();
break;
case ']' :
if (temp.empty() || temp.top() != '[')
return false;
else temp.pop();
break;
case '}' :
if (temp.empty() || temp.top() != '{')
return false;
else temp.pop();
break;
}
}
return temp.empty();
}
};
1、case语句中不可以使用 ‘ ||’,写成case ‘(’ || ‘[’ || ‘{‘:会出错。
2、temp.empty() || temp.top() != ‘(’ 中temp.empty()和temp.top()顺序不可交换,c语言中或操作符,先对左操作数求值,若为真,右操作数便不再求值。
该博客讨论了如何验证包含括号的字符串是否有效,如'()'和'()[]{}'。它强调了在解题过程中需要注意的两个关键点:1) case语句中不能使用' ||',2) 在检查栈是否为空和顶部元素是否为'('时,必须先检查栈是否为空,因为C语言的或操作符会短路求值。

1322

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



