class Solution { public: /** * * @param s string字符串 * @return bool布尔型 */ bool isValid(string s) { // write code here stack<char> stk; //创建一个char型的栈,名为stk for(int i=0;i<s.length();i++) { switch(s[i]) { case '(': stk.push(')'); //将对应的右括号入栈,期待后面遇到右括号 break; case '[': stk.push(']'); break; case '{': stk.push('}'); break; //跳出switch语句 case ')': case ']': case '}': if(stk.top()!=s[i] || stk.empty()) //遇到右括号了,栈顶元素出栈 //return false; { stk.pop(); break; } else //stk.pop(); return false; //其他情况都说明字符串不合法 } } return stk.empty()?true:false; //遍历结束以后,栈为空,说明都匹配,字符串合法。 } }; 怎么修改
时间: 2023-06-18 17:05:03 浏览: 303
在处理右括号时,应该先判断栈是否为空,如果栈为空,说明没有左括号与之对应,此时应该返回false。代码修改如下:
```
class Solution {
public:
/**
*
* @param s string字符串
* @return bool布尔型
*/
bool isValid(string s) {
// write code here
stack<char> stk; //创建一个char型的栈,名为stk
for(int i=0;i<s.length();i++)
{
switch(s[i])
{
case '(':
stk.push(')'); //将对应的右括号入栈,期待后面遇到右括号
break;
case '[':
stk.push(']');
break;
case '{':
stk.push('}');
break; //跳出switch语句
case ')':
case ']':
case '}':
if(stk.empty() || stk.top()!=s[i]) //遇到右括号了,判断栈是否为空及栈顶元素是否与当前右括号匹配
{
return false;
}
else
{
stk.pop();
break;
}
}
}
return stk.empty(); //遍历结束以后,栈为空,说明都匹配,字符串合法。
}
};
```
阅读全文