如sssfgtdfssddfsssfssss,出現(xiàn)最多的字符是s,出現(xiàn)了12次
傳統(tǒng)寫法
分析:
1.準(zhǔn)備一個空的json,通過循環(huán)字符串的每個字符來看,如果json里沒有這個字符,就在json里創(chuàng)建一個新的數(shù)組,并把這個字符放進數(shù)組里,如果json里有這個字符,繼續(xù)把字符添加進數(shù)組里,這時循環(huán)完json里有n個數(shù)組
2.找出json里長度最長的數(shù)組,此時長度即個數(shù),而最多的字符就是這個參數(shù),用到for...in...循環(huán)和參數(shù)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,否則只有存在這個字符時才添加。次數(shù)會少一次}for(var attr in json){if(num<json[attr].length){num=json[attr].length;value=json[attr][0];}}alert("出現(xiàn)最多的字符是:"+value+',出現(xiàn)次數(shù)是:'+num);};max(str);如果不想往json里放東西怎么做呢?
分析:
1.準(zhǔn)備一個空的json,通過循環(huán)字符串的每個字符來看,如果json里沒有這個字符,就把這個字符的數(shù)目設(shè)為1,如果有則數(shù)目++
2.循環(huán)json里的字符,只要存在,就把他的數(shù)目賦給一個變量,并且每次都比較新的字符數(shù)量和這個變量的大小,如果比變量大,則更新變量的值,最后這個變量的值就是最多字符的數(shù)目
而最多的字符就是json里這個字符
var str="sssfgtdfssddfsssfssss";function max(){var json={};for(var i=0;i<str.length;i++){var k=str[i]; //k是所有字符,字符串也跟數(shù)組一樣可以通過中括號下標(biāo)方法取到每個子元素if(json[k]){json[k]++; //json里有這個字符時,把這個字符的數(shù)量+1,}else{json[k]=1; //否則把這個字符的數(shù)量設(shè)為1}}var num=0;var value=null;for(var k in json){ //s、f、g、t、dif(json[k]>num){num=json[k];value=k;}}alert("出現(xiàn)最多的字符是:"+value+',出現(xiàn)次數(shù)是:'+num);};max(str); 正則的方法
分析:
1.字符串轉(zhuǎn)為數(shù)組進行排序,以便正則選出相同的挨在一起的字符
2.通過正則replace()方法的兩個參數(shù),來匹配出現(xiàn)最多的字符和數(shù)量
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就是出現(xiàn)過的有重復(fù)的取出來,/1表示跟前面第一個子項是相同的new_str.replace(re,function($0,$1){ //$0代表取出來重復(fù)的一個個整體,如[s,s...],[f,f..],[d,d....] $1代表這個整體里的字符if(num<$0.length){num=$0.length;value=$1}});alert(value+":"+num)};max(str);新聞熱點
疑難解答