我是一名新手,正在尝试解决Leetcode上的问题,但是出现了编译错误。
public class Solution
{
public bool IsValid(string s)
{
if(s.Length%2==1)
{
return false;
}
if(s.Length==0)
{
return true;
}
Stack st=new Stack();
for(int i=0;i<s.Length;i++)
{
switch(s[i])
{
case '(':
st.Push(s[i]);
break;
case'[':
st.Push(s[i]);
break;
case'{':
st.Push(s[i]);
break;
case ')':
if(st.Count==0||st.Peek()!='(')
{
return false;
}
else
{
st.Pop();
}
break;
case']':
if(st.Count==0||st.Peek()!='[')
{
return false;
}
else
{
st.Pop();
}
break;
case'}':
if(st.Count==0||st.Peek()!='}')
{
return false;
}
else
{
st.Pop();
}
break;
}
}
return st.Count==0;
}
}
我得到一个错误。
第28行:运算符'!='不能应用于类型为'object'和'char'的操作数
可能是这个人
if(st.Count==0||st.Peek()!='(')
我知道这与数据类型有关,但是我不知道如何解决它。
我不是讲英语的人,所以我的一些英语语法可能有些疯狂。抱歉,谢谢您的帮助。
答案 0 :(得分:12)
Stack
存储对象,但是您要专门存储char
。
请改用Stack<char>。
Stack<char> st = new Stack<char>();
答案 1 :(得分:2)
由于使用的是不带泛型的堆栈,因此出现错误。您的堆栈是Object
类型的堆栈。
您需要将从堆栈中弹出或查看的数据投射到char
。
示例:
if(st.Count==0|| (char) st.Peek()!='(')