c# 使用栈实现有效的括号

需求:

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

代码如下:

       public static bool IsValiad(string s)
       {
           Stack<string> stack = new Stack<string>();//创建一个字符串的栈
           Dictionary<string, string> dic = new Dictionary<string, string>();
           dic.Add("(", ")");
           dic.Add("[", "]");
           dic.Add("{", "}");
           if (string.IsNullOrEmpty(s)) return true;
           for (int i = 0; i < s.Length; i++)
           {
               if (s[i] == '(' || s[i] == '[' || s[i] == '{')
               {
                   stack.Push(s[i].ToString());  
               }
               else {
                     if (stack.Count == 0) return false;
                       string sign = stack.Pop();
                       if (dic[sign] != s[i].ToString()) return false;
                    
               }
           }
           return stack.Count == 0 ? true : false;
       }

代码解析:

              1.遇到向左括号的时候把向左的括号压入栈中

              2.遇到向右括号就把栈顶的元素进行弹出,然后判断当前的右括号是否和栈顶元素相对应的右括号相等

             3.极端情况,字符要是全是左符号或者全是右符号。这两种情况中可以通过判断栈里是否有元素来判定,正确的字符串栈中数据都会被弹出

posted @ 2019-06-04 11:47  凉夏诺浅  阅读(229)  评论(0编辑  收藏  举报