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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM