C#代码随想录算法训练营第十一天 | LeetCode20 LeetCode1047 LeetCode150

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();
  }

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值