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

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

 

 

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

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

01function 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  
12var str="23234kjafh328akdjfh9238442";
13alert(fineStr(str,0,[]));
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值