大风车01

归来仍少年

有效的括号

题目:判断是否是有效的括号,括号有 ()[]{}三种,在字符串中必须是闭合的,比如 (){} 这是有效的,{)这种是无效的。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

解题思路:

1.利用栈先入后出特点恰好与本题括号排序特点一致,即若遇到左括号入栈,遇到右括号时将对应栈顶左括号出栈,则遍历完所有括号后 stack 仍然为空;

//非2的倍数 直接返回
            if (s.Length % 2 == 1)
                return false;

            //遇到 左边括号就进栈,第一次遇到右边括号,则判断栈顶元素是不是 和自己相反(闭合),如果是闭合那就移除栈顶元素
            //继续下一轮

            Stack<char> chars = new Stack<char>();

            for (int i = 0; i < s.Length; i++)
            {
                if (s[i] == '(' || s[i] == '[' || s[i]=='{')
                {
                    chars.Push(s[i]);
                }
                else if (chars.Count == 0 || (s[i]==')'&&chars.Pop()!='(')
                    || (s[i] == ']' && chars.Pop() != '[')
                    || (s[i] == '}' && chars.Pop() != '{')
                    )
                {
                    return false;
                }
            }

            return chars.Count == 0;

关键点:栈

posted on 2022-10-29 11:15  大风车01  阅读(34)  评论(0编辑  收藏  举报

导航