搜索出字符串中出现次数最多的字符,并统计次数

今天看到一道题,搜索出字符串中出现次数最多的字符,并统计其次数,就自己动手写一下,是用递归来实现的,原理是这样的:每一次都取出字符串STR的第一个字符FS,统计出其在字符串STR中出现的次数N,然后把字符串STR中的FS删除,一直到字符串STR的长度小于N。

  
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1 var str = " aaaa13123aass123123121sssssddd123d1231231dddd " ;
2 var fs = "" ; // 保存出现次数最多的字符
3 var n = 0 ; // 保存次数
4 function fineStr(s,n,fs){
5 var f = s.match( / ^. / )[ 0 ]; // 取出串的第一个字符
6 var rf = new RegExp(f, " g " ); // 生成以第一个字符为内容的正则表达式
7 var nn = s.match(rf).length; // 利用match方法统计出出现的次数
8 if (nn > n){fs = f;n = nn} // 如果大于当前次数,则更新字符和次数
9 s = s.replace(rf, "" ); // 清除串中所有当前字符
10 if (s.length < n){ return [n,fs];} // 退出条件
11 return fineStr(s,n,fs); // 递归
12 }
13
14 var ar = fineStr(str,n,fs);
15 alert(ar);

上面的代码还一个问题,就是如果出现最多的字符不是一个,而是有几个时,只能查找出第一个出现的字符,下面的代码是经过修改后的,会找出所有出现次数最高的字符

01 function fineStr(s,n,fs){
02 var f=s.match(/^./)[0];
03 var rf=new RegExp(f,"g");
04 var nn=s.match(rf).length;
05 if(nn==n)fs.push(f);
06 if(nn>n){fs=[];fs.push(f);n=nn}
07 s=s.replace(rf,"");
08 if(s.length<n){return ["出现次数最多的字符是:"+fs.join(","),"总次数为:"+n];}
09 return fineStr(s,n,fs);
10 }
11
12 var str="23234kjafh328akdjfh9238442";
13 alert(fineStr(str,0,[]));

你可能感兴趣的:(字符串)