• Js练习题之查找字符串中出现最多的字符和个数


    如sssfgtdfssddfsssfssss,出现最多的字符是s,出现了12次

    传统写法

    分析:

    1.准备一个空的json,通过循环字符串的每个字符来看,如果json里没有这个字符,就在json里创建一个新的数组,并把这个字符放进数组里,如果json里有这个字符,继续把字符添加进数组里,这时循环完json里有n个数组

    2.找出json里长度最长的数组,此时长度即个数,而最多的字符就是这个参数,用到for...in...循环和参数attr

    var str="sssfgtdfssddfsssfssss";
    function max(){
        var json={};
        var num=0;
        var value=null;
        for(var i=0;i<str.length;i++){
            var k=str[i];
            if(!json[k]){
                json[k]=[];
            }
            json[k].push(k);     //这里不需要else,否则只有存在这个字符时才添加。次数会少一次
        }
        for(var attr in json){
            if(num<json[attr].length){
                num=json[attr].length;
                value=json[attr][0];
            }
        }
        alert("出现最多的字符是:"+value+',出现次数是:'+num);
    };
    max(str);
    

    如果不想往json里放东西怎么做呢?

    分析:

    1.准备一个空的json,通过循环字符串的每个字符来看,如果json里没有这个字符,就把这个字符的数目设为1,如果有则数目++

    2.循环json里的字符,只要存在,就把他的数目赋给一个变量,并且每次都比较新的字符数量和这个变量的大小,如果比变量大,则更新变量的值,最后这个变量的值就是最多字符的数目

    而最多的字符就是json里这个字符

    var str="sssfgtdfssddfsssfssss";
    function max(){
        var json={};
        for(var i=0;i<str.length;i++){
            var k=str[i];          //k是所有字符,字符串也跟数组一样可以通过中括号下标方法取到每个子元素
            if(json[k]){
                json[k]++;                 //json里有这个字符时,把这个字符的数量+1,
            }
            else{
                json[k]=1;                 //否则把这个字符的数量设为1
            }
        }
        var num=0;
        var value=null;
        for(var k in json){               //s、f、g、t、d
            if(json[k]>num){
                num=json[k];
                value=k;
            }
        }
        alert("出现最多的字符是:"+value+',出现次数是:'+num);
    };
    max(str);
    

    正则的方法

    分析:

    1.字符串转为数组进行排序,以便正则选出相同的挨在一起的字符

    2.通过正则replace()方法的两个参数,来匹配出现最多的字符和数量

    var str="sssfgtdfssddfsssfssss";
    var num=0;
    var value=null;
    function max(){
        var new_str=str.split("").sort().join("");
        var re=/(w)1+/g;                 //没有1,re就是一整个排好序的字符串,有了1就是出现过的有重复的取出来,1表示跟前面第一个子项是相同的
        new_str.replace(re,function($0,$1){    //$0代表取出来重复的一个个整体,如[s,s...],[f,f..],[d,d....]  $1代表这个整体里的字符
            if(num<$0.length){
                num=$0.length;
                value=$1
            }
        });
        alert(value+":"+num)
    };
    max(str);
    
  • 相关阅读:
    ASP.NET Post方式提交
    MVC增加操作日志
    asp.net MVC 下拉多级联动及编辑
    redis基本数据类型之String
    关于idea下使用springinitializr创建项目时 初始化失败的解决
    Failed to read artifact descriptor for org.mybatis:mybatis:jar:2.2.1
    如何查看日志文件
    nginx 部署vue 以及同一端口下部署监听多个vue 项目
    JsonView 与JsonIgnore 使用
    vue 打包部署
  • 原文地址:https://www.cnblogs.com/zhangwenkan/p/4206208.html
Copyright © 2020-2023  润新知