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