问题描述
为什么我收到有关leetcode问题20的错误。有效的括号。我试图解决它,但是失败了。
第15行:char 23:致命错误:二进制表达式的无效操作数(“ char”和“ void”) 否则if(c!= st.pop())
产生1个错误。
class Solution {
public:
bool isValid(string s) {
if(s.length() == 0)
return true;
stack<char> st;
for(char &c : s)
{
if(c == '(')
st.push(')');
else if(c == '[')
st.push(']');
else if(c == '{')
st.push('}');
else if(st.empty() || c != st.pop())
return false;
}
return st.empty();
}
};
我将堆栈设置为char类型,但似乎将其视为空类型?
class Solution {
public:
bool isValid(string s) {
if(s.length() == 0)
return true;
stack<char> st;
for(char &c : s)
{
if(c == '(')
st.push(')');
else if(c == '[')
st.push(']');
else if(c == '{')
st.push('}');
else if(st.empty() || c != st.top())
return false;
else
st.pop();
}
return st.empty();
}
};
解决方法
std::stack::pop()
没有返回值。
当您执行c != st.pop()
时,编译器会看到“ 将char
的值与void
的值进行比较”,这毫无意义。
可能的解决方案是先从顶部将值获取到temp
变量,然后再获取pop()
并至少对其进行比较:
else {
if (st.empty())
return false;
char temp = st.top();
st.pop();
if(c != temp)
return false;
}