使用js对来判断一个字符串中括号是否平衡匹配

序言:早上起来,按照昨天的计划,看数据结构,上课期间没学习好,这不去公司培训了,发现其重要性,趁做毕业设计的时间好好的学习一些基础知识。

不得不说的是对于软件的童鞋来说,基础仍然是重要的。

不多说,进入正题,在看数据结构遇到的一个问题,其问题是:

判断一个字符串中圆括号是否平衡并乔好匹配。

我的思路:当我遇到一个问题的时候,我就开始分析这个问题,深入了解这个问题,常做的事就是在纸上画画写写。

1.要知道左右括号要匹配必须左括号的个数是等于右括号个数,这就是解决该问题的算法。

2.要判断一个字符串中括号是否匹配那就得读取每一个字符串,得使用到js中的String对象中的一个方法charAt(i)。

3.通过循环读取字符串中的每一个字符,判断字符是左括号,则leftNum++;如果是右括号,则leftNum--。

4.最后通过leftNum是否为零来判断左右括号是否平等。

以下是我使用js实现的代码:

// isBracketBalance(str)函数是一个用于判断字符串中括号是否平衡匹配的函数
    // @prarmeter: str是将要被判断的字符串
    // 如果匹配返回true
    // 如果不匹配则返回false
    function isBracketBalance(str)
    {
        var leftBracketNum = 0,  // 用于保存左括号个数的变量
            strLength = str.length; // 把字符串的长度付给一个变量增加程序的性能

        // 通过for循环来读取字符串中的一个一个的字符
        for(var i = 0; i < strLength; i++)
        {
            var temp = str.charAt(i); // 付给临时变量增加程序的性能
            if(temp === '(') // 如果是左括号,则leftBracketNum++
            {
                leftBracketNum++;
            }
            if(temp === ')') // 如果是右括号,则leftBracketNum--
            {
                leftBracketNum--;
            }
        }

        // 最后判断leftBracketNum,如果为0表示平衡否则不平衡
        if(leftBracketNum === 0)
        {
            return true;
        }else{
            return false;
        }
    }

当写完以上代码后,我想做做测试,不得不人工的写个字符串来测试,这很麻烦,我就想到自动化(我也是刚学,也不知这是不是自动化)

思路:使用js的随机函数,从而随机的取左括号或者右括号,拼凑成一个字符串,调用isBracketBalance(str)函数。

以下是我使用js写的自动化测试isBracketBalance(str)的代码:

// 自动化测试
    // 写一个随机的只包括括号的字符串
    // 其个数也是随机的,自动化测试100遍
    // 打印出测试过程中不匹配的字符串
    function autoTest()
    {
        var errorNum = 0; // 用于保存错误个数
        // 自动化测试100遍
        for(var i = 0; i < 100; i++)
        {
            var len = Math.floor(Math.random()*100), // 字符串取0~100之间的任意长度
                str = []; // 用于保存随机取得的括号,最后作为测试的对象

            // for循环取括号的随机值
            for(var j = 0; j < len; j++)
            {
                if(Math.floor((Math.random()*100)) % 2 == 0)
                {
                    str.push('(');
                }else{
                    str.push(')');
                }
            }

            str = str.join('');
            if(isBracketBalance(str) == false)
            {
                console.log(str);
                errorNum++;
            }
        }
        console.log(errorNum);
    }

遇到的问题:autoTest()局限性,测试的数量是有限的,测试为什么绝大多数是false。

测试的打印结果:

使用js对来判断一个字符串中括号是否平衡匹配

感悟:每天使用自己熟练的program language去解决一个问题,我觉得这是编程提升的一个方法。深入的挖掘将是更进一步的提升。我发现c++能做更多的事,能更方便的做事,这使得我更加的想多学学c++知识。
原文链接: https://www.cnblogs.com/youshaohua/archive/2013/04/29/js-for-bracket-balance.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/86491

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午10:35
下一篇 2023年2月9日 下午10:36

相关推荐