20 有效的括号
题目链接:. - 力扣(LeetCode)
主要思想:
利用栈的先进后出思想,检测到左括号让右括号入栈 ,如果都不满足检测当前栈的数量如果不是0则去判断当前字符是否与栈的头部相等,如果不等则为false,如果都满足则进行出栈
public bool IsValid(string s)
{
if (s.Length%2!=0) return false;
var stack=new Stack<char>();
for (int i = 0; i < s.Length; i++)
{
stack.TryPeek(out var top);
if (s[i] =='(')
{
stack.Push(')');
}
else if (s[i] == '[')
{
stack.Push(']');
}
else if (s[i] =='{')
{
stack.Push('}');
}
else if (stack.Count<=0)
{
return false;
}
else if (top != s[i])
{
return false;
}
else
{
stack.Pop();
}
}
return stack.Count <= 0;
}
1047 删除字符串中所有相邻重复项
public string RemoveDuplicates(string s)
{
StringBuilder res = new StringBuilder();
foreach (char c in s)
{
if (res.Length > 0 && res[res.Length - 1] == c)
{
res.Remove(res.Length - 1, 1);
}
else
{
res.Append(c);
}
}
return res.ToString();
}
150 逆波兰表达式求值
题目链接:. - 力扣(LeetCode)
public int EvalRPN(string[] tokens)
{
var intStack=new Stack<int>();
foreach (var token in tokens)
{
if (int.TryParse(token,out var result))
{
intStack.Push(result);
}
else
{
var num2 = intStack.Pop();
var num1 = intStack.Pop();
if (token=="+")
{
intStack.Push(num1 + num2);
}
else if (token == "-")
{
intStack.Push(num1 - num2);
}
else if (token=="*")
{
intStack.Push(num1 * num2);
}
else
{
intStack.Push(num1 / num2);
}
}
}
return intStack.Pop();
}