1.3.4

上次更新:2019-04-17
发现了题解错误/代码缺陷/排版问题?请点这里:如何:提交反馈

解答

官方 JAVA 版本参考:Parentheses.java

遇到左括号就入栈,遇到右括号就检查是否和栈顶的左括号匹配,如果匹配则弹栈,否则返回 false。

结束时如果栈不为空则返回 false,否则返回 true。

代码

using System;
using Generics;

namespace _1._3._4
{
    /*
     * 1.3.4
     * 
     * 编写一个 Stack 的用例 Parentheses,
     * 从标准输入中读取一个文本流并使用栈判定其中的括号是否配对完整。
     * 例如,对于 [()]{}{[()()]()} 程序应该打印 true,
     * 对于 [(]) 则打印 false。
     * 
     */
    class Parentheses
    {
        static bool isBalanced(string input)
        {
            Stack<char> stack = new Stack<char>();

            foreach (char i in input)
            {
                if (i == '(' || i == '[' || i == '{')
                    stack.Push(i);
                else
                {
                    if (stack.Peek() == '(' && i == ')')
                        stack.Pop();
                    else if (stack.Peek() == '{' && i == '}')
                        stack.Pop();
                    else if (stack.Peek() == '[' && i == ']')
                        stack.Pop();
                    else
                        return false;
                }
            }

            return stack.IsEmpty();
        }

        static void Main(string[] args)
        {
            string input = "[()]{}{[()()]()}";
            Console.WriteLine(isBalanced(input));
            string input2 = "[(])";
            Console.WriteLine(isBalanced(input2));
        }
    }
}

另请参阅

Generics 库

上一题 下一题