• 从字符串中读取反复最多的那个字符及反复数量方法


           有些从网上直接拷贝来的面试题总是有这样一道题:

            “请写出一个从字符串中读取反复最多的那个字符及反复数量方法。”

          大家会发现,网上流传的解决方式有如例一所看到的:

         例一:

            var strss ="adadfdfseffserfefsefseeffffftsdg"; //命名一个变量放置给出的字符串

            var kkk = getMaxStrLength(strss);
            console.log(kkk);
            function getMaxStrLength(str){
                var maxRepetitionLength = 0;
                var result = "";
                while (str !== ''){
                    var oldStr = str;
                    var firstStr = str.substring(0,1);
                    str = str.replace(new RegExp(firstStr,"g"), "");
                    if( oldStr.length -str.length > maxRepetitionLength ){
                        maxRepetitionLength = oldStr.length -str.length;
                        result = firstStr + "=" + maxRepetitionLength;
                    }

                }
                return result;

            }

           不得不说,这样的通过取字符串首字来进行替成空格。并通过while循环来跌代然后比較去除首字空格前后变化的字符长度来从而得到该子字符在父子符中出现的次数,代码非常精减也非常巧妙。可是。个人感觉读起来不是那么好理解。

    由此,受方例一的启示,如今总结出

    例二:

            var strs ="adadfdfseffserfefsefseeffffftsdg";
            var kk = getMaxStrLength1(strs);
            console.log(kk);

          //通过for 循环把每个子符及父子符当參传进以下功能函数。然后通过记录參数maxRepetitionLength 不停地去刷新新的记录
            function getMaxStrLength1(str){
                var len = str.length,
                    result = '',
                    maxRepetitionLength = 0;
                for(var i= 0; i<len; i++){
                    var subStr = str.charAt(i);
                    var countArr = countSubstring(str,subStr);
                    if(countArr[1]>maxRepetitionLength){
                        maxRepetitionLength = countArr[1];
                        result = subStr + "=" + maxRepetitionLength;
                    }

                }
                return result;
            }

           //功能拆分。读取给定子字符在父字符中出现的次数
            function countSubstring(str,subString){
                var count = 0;
                var reg = new RegExp(subString,"g");
                if(str.match(reg)== null){
                    count = 0;
                }else {
                    count = str.match(reg).length;
                }
                return [subString, count];
            }

    上面这段代码尽管由两个函数组成,但个人感觉功能设置更合理,尽管代码量多了一些,但更易读懂。



  • 相关阅读:
    redis中的发布订阅(Pub/Sub)
    emmc基础技术8:操作模式3-interrupt mode
    Linux命令-tar
    git获取内核源码的方法
    Linux内核基础设施
    Linux内核简介
    emmc基础技术8:操作模式2-device identification mode
    内核子系统文档撰写方法
    eMMC基础技术6:eMMC data读写
    eMMC基础技术10:寄存器介绍
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7287037.html
Copyright © 2020-2023  润新知