如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、dif(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);