易车网的一道面试题:JS计算字符串中出现次数最多的字符和出现的次数
“计算出字符串中出现次数最多的字符是什么,出现了多少次?”
看到这个需求,我想大多数人应该首先想到的是转换成数组,再做处理,当然是可以解决问题的,然后这里提供一个巧妙的算法设计,无需转数组,可以很快解决问题,代码如下:
[js]代码:
var str = "adadfdfseffserfefsefseeffffftsdg"; var maxLength = 0; var result = ""; while(str!=''){ oldStr = str; getStr = str.charAt(0); str = str.replace(new RegExp(getStr,"g"),""); if( oldStr.length-str.length > maxLength){ maxLength = oldStr.length-str.length; result = getStr + "=" + maxLength; } } alert(result);
引用网址:http://www.173it.cn/view-5751-1.html
很久之前的一个笔试题,但是不会做,只是写了个大概思路,好像是用到了正则表达式云云……今天忽然想起,然后做了一下,自己觉得还行的算法,挺简单易懂的,除了初始化的代码外代码还不到10行。
javascript代码:
var
str=
"abaacabbabab"
;
var
tempStr=
""
;
var
arr=Array;
arr=[0];
for
(
var
i=0;i<str.length-1;i++){
tempStr=str.charAt(i);
if
(str.split(tempStr).length>arr[0]){
arr[0]=str.split(tempStr).length-1;
//储存该字符出现次数
arr[1]=tempStr;
//储存该字符
}
}
alert(arr);
AS3版:
var
str:
String
=
"abaacabbabab"
;
var
tempStr:
String
;
var
arr:
Array
=[
0
];
for
(
var
i=
0
;i<str.length-
1
;i++){
tempStr=str.charAt(i);
if
(str.split(tempStr).length>arr[
0
]){
arr[
0
]=str.split(tempStr).length-
1
;
arr[
1
]=tempStr;
}
}
trace
(arr);
这种算法如果遇到有几个字符出现的次数相同就会以最后找到的字符为结果。
引用网址:http://www.cnblogs.com/cos2004/archive/2011/04/03/2004764.html