使用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。

测试的打印结果:

 

 

感悟:每天使用自己熟练的program language去解决一个问题,我觉得这是编程提升的一个方法。深入的挖掘将是更进一步的提升。我发现c++能做更多的事,能更方便的做事,这使得我更加的想多学学c++知识。

转载于:https://www.cnblogs.com/youshaohua/archive/2013/04/29/js-for-bracket-balance.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值