Checking string has balanced parentheses

后端 未结 18 2363
谎友^
谎友^ 2020-12-01 08:42

I am reading the Algorithm Design Manual Second Edition and this is from an exercise question. Quoting the question

A common problem for comp

18条回答
  •  庸人自扰
    2020-12-01 09:03

        static public bool CheckForBalancedBracketing(string IncomingString)
        {
        /*******************************************************************
         * The easiest way to check for balanced bracketing is to start    *
         * counting left to right adding one for each opening bracket, '(' *
         * and subtracting 1 for every closing bracket, ')'.  At the end   *
         * the sum total should be zero and at no time should the count    *
         * fall below zero.                                                *
         *                                                                 *
         * Implementation:  The bracket counting variable is an unsigned   *
         * integer and we trap an overflow exception.  This happens if the *
         * unsigned variable ever goes negative.  This allows us to abort  *
         * at the very first imbalance rather than wasting time checking   *
         * the rest of the characters in the string.                       *
         *                                                                 *
         * At the end all we have to do is check to see if the count       *
         * is equal to zero for a "balanced" result.                       *
         *                                                                 *
         *******************************************************************/
            const char LeftParenthesis = '(';
            const char RightParenthesis = ')';
            uint BracketCount = 0;
    
            try
            {
                checked  // Turns on overflow checking.
                {
                    for (int Index = 0; Index < IncomingString.Length; Index++)
                    {
                        switch (IncomingString[Index])
                        {
                            case LeftParenthesis:
                                BracketCount++;
                                continue;
                            case RightParenthesis:
                                BracketCount--;
                                continue;
                            default:
                                continue;
                        }  // end of switch()
    
                    }
                }
            }
    
            catch (OverflowException)
            {
                return false;
            }
    
            if (BracketCount == 0)
            {
                return true;
            }
    
            return false;
    
        }  // end of CheckForBalancedBracketing()
    

提交回复
热议问题