您的位置:首页 > 其它

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

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

1varstr="aaaa13123aass123123121sssssddd123d1231231dddd";
2varfs="";//保存出现次数最多的字符
3varn=0;//保存次数
4functionfineStr(s,n,fs){
5varf=s.match(/^./)[0];//取出串的第一个字符
6varrf=newRegExp(f,"g");//生成以第一个字符为内容的正则表达式
7varnn=s.match(rf).length;//利用match方法统计出出现的次数
8if(nn>n){fs=f;n=nn}//如果大于当前次数,则更新字符和次数
9s=s.replace(rf,"");//清除串中所有当前字符
10if(s.length<n){return[n,fs];}//退出条件
11returnfineStr(s,n,fs);//递归
12}
13
14varar=fineStr(str,n,fs);
15alert(ar);


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

viewsourceprint?

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,[]));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐