我的程序:长度:15120 用时 78ms
你的程序:长度:904 用时 9016ms
function getChNum(str){
var vec = {};
for(var i=0,j=str.length;i<j;i++){
var ch = str.charAt(i);
if(vec[ch]) continue;
var reg = new RegExp(ch,"g");
var ar = str.match(reg);
if(ar) vec[ch] = ar.length;
//alert(ar.length);
}
var maxtimes = 0;
var maxch = "";
for(var p in vec)
if(vec[p] > maxtimes){
maxtimes = vec[p];
maxch = p;
}
return { "times":maxtimes, "charater":maxch};
}
var ds = new Date();
var o = getChNum(str)
var de = new Date();
document.write(o["times"]," " , o["charater"]);
prompt("",str.length + " time is " + (de.valueOf() - ds.valueOf()));
你的程序:长度:904 用时 9016ms
function getChNum(str){
var vec = {};
for(var i=0,j=str.length;i<j;i++){
var ch = str.charAt(i);
if(vec[ch]) continue;
var reg = new RegExp(ch,"g");
var ar = str.match(reg);
if(ar) vec[ch] = ar.length;
//alert(ar.length);
}
var maxtimes = 0;
var maxch = "";
for(var p in vec)
if(vec[p] > maxtimes){
maxtimes = vec[p];
maxch = p;
}
return { "times":maxtimes, "charater":maxch};
}
var ds = new Date();
var o = getChNum(str)
var de = new Date();
document.write(o["times"]," " , o["charater"]);
prompt("",str.length + " time is " + (de.valueOf() - ds.valueOf()));
<!--
var ds = new Date();
var str = "abcdefsdfasdfsdfasdad";
var strChar;
var numMax = 0;
var oCount = new Object();
for (var i=0; i<str.length; i++)
{
if (oCount[str.charAt(i)] == undefined) oCount[str.charAt(i)] = 0;
oCount[str.charAt(i)] += 1;
}
for (var a in oCount)
{
if (oCount[a] > numMax)
{
numMax = oCount[a];
strChar = a;
}
}
var de = new Date();
document.write("Timespan: " + (de.valueOf() - ds.valueOf()) + "ms."); // Timespan: 0ms.
alert(strChar + " : " + numMax); // d : 6
//-->
</script>
Length: 15000
Timespan: 157ms. 俺的:
Length: 15000
Timespan: 187ms. 俺的虽然效率略低,但是代码短又易读!LZ 自选,哈
{
maxvalue=tmpcount2;
tmpstr="出现最多的字符是:"+objstr.charAt(n);
}
// else
// {
// maxvalue=1;
// tmpstr="没有得复的字符";
// }
var o = getChNum(str) ; //被计时的程序
var de = new Date();//计时结束
de.valueOf() - ds.valueOf() 就是程序运行的毫秒数了
alert(test(str));
function test(str)
{
if(str=="")return "";
var max=0;
var rs="";
while(true)
{
var ls=str.length;
var ch=str.charAt(0);
var reg=new RegExp(ch,"g");
str=str.replace(reg,"");
var rps=ls-str.length;
rs += max==rps?ch+":"+max+"\n":"";
rs = rps > max?ch+":"+rps+"\n":rs;
max = rps > max?rps:max;
if(!str)break;
}
return rs;
}
</script>
<script type="text/javascript" language="javascript">var str1="abcdefsdfasdfsdfasdad";
var str="";
for(var i=0;i<15000;i++)
str+=str1;
alert(test(str));
function test(str)
{
var ds = new Date(); //开始计时
if(str=="")return "";
var max=0;
var rs="";
while(true)
{
var ls=str.length;
var ch=str.charAt(0);
var reg=new RegExp(ch,"g");
str=str.replace(reg,"");
var rps=ls-str.length;
rs += max==rps?ch+":"+max+"\n":"";
rs = rps > max?ch+":"+rps+"\n":rs;
max = rps > max?rps:max;
if(!str)break;
}
return (new Date()-ds)+"ms\n"+rs;
}
</script>不算字符串生成的时间
我这里62ms
<script type="text/javascript" language="javascript">var str1="abcdefsdfasdfsdfasdad";
var str="";
for(var i=0;i<15000;i++)
str+=str1;
alert("start");
alert(getChNum(str));
function getChNum(str)
{
var ds = new Date();
var vec = {};
for(var i=0,j=str.length;i<j;i++){
var ch = str.charAt(i);
if(vec[ch]) continue;
var reg = new RegExp(ch,"g");
var ar = str.match(reg);
if(ar) vec[ch] = ar.length;
}
var maxtimes = 0;
var maxch = "";
for(var p in vec)
if(vec[p] > maxtimes){
maxtimes = vec[p];
maxch = p;
}
alert(new Date()-ds+"ms");
return { "times":maxtimes, "charater":maxch};
}
<script>
不算字符串生产时间,要7187ms
字符 : a 出现次数 :20000
字符串长度: 100,000 运行时间: 203 毫秒
<script type="text/javascript">
<!--
var str = "abcdefghia";
var i = 14;
while(i--)
str += str;
str = str.substring(63840);var vec;
function getChNum(str) {
vec = {};
while(str.length){
var k=0;
var ch = str.charAt(0);
var reg = new RegExp(ch,"g");
vec[ch] = str.match(reg).length;
str = str.replace(reg,"");
}
var maxtimes = 0;
var maxch = "";
for (var p in vec) {
if (vec[p] > maxtimes) {
maxtimes = vec[p];
maxch = p;
}
}
return {"times":maxtimes, "charater":maxch};
}var ds = new Date();
var o = getChNum(str);
var de = new Date();
for (var p in vec) {
document.write(" char : ", p, " times:", vec[p], "<BR>");
}
document.write( "most char : ", o["charater"]," times :", o["times"], "<BR>");
document.write("strLen: ", str.length + " runTime: " + (de.valueOf() - ds.valueOf()));//-->
</script>
var i = 17;
while(i--)
str += str;
str = str.substring(310720);most char : a times :200000
strLen: 1000000 runTime: 2172
"aabb"ls只能找出a
b查不到的把
ls的不支持哦
<!--
var str = "abbeefghia";
var i = 17;
while(i--)
str += str;
str = str.substring(310720);var vec;
function getChNum(str) {
vec = {};
while(str.length){
var k=0;
var ch = str.charAt(0);
var reg = new RegExp(ch,"g");
vec[ch] = str.match(reg).length;
str = str.replace(reg,"");
}
var maxtimes = 0;
var maxch = "";
var ar = [];
for (var p in vec) {
if (vec[p] > maxtimes) {
maxtimes = vec[p];
maxch = p;
}
}
for (var p in vec) {
if(vec[p] == maxtimes)
ar.push(p);
}
return {"times":maxtimes,"chs":ar};
}var ds = new Date();
var o = getChNum(str);
var de = new Date();
for (var p in vec) {
document.write(" char : ", p, " times:", vec[p], "<BR>");
}
document.write( "most char : ", o["chs"]," times :", o["times"], "<BR>");
document.write("strLen: ", str.length + " runTime: " + (de.valueOf() - ds.valueOf()));//-->
</script>
codeworker999程序的BUG例子(注意这个程序会死掉浏览器,调试的时候小心)
<script language=javascript>
var str=""
function find()
{
var ds = new Date(); //开始计时
if(str=="")return "";
var max=0;
var rs="";
while(true)
{
var ls=str.length;
var ch=str.charAt(0);
var reg=new RegExp(ch,"g");
str=str.replace(reg,"");
var rps=ls-str.length;
rs += max==rps?ch+":"+max+"\n":"";
rs = rps > max?ch+":"+rps+"\n":rs;
max = rps > max?rps:max;
if(!str)break;
}
alert((new Date()-ds)+"ms\n"+rs);
}function init()
{
var tempArray=new Array()
var num=document.getElementById("num").value
var numValue="";
for(var i=0;i<num;i++)
{
tempArray[i]=String.fromCharCode(i)
}
str=tempArray.join("");
document.getElementById("textarea1").value=str
}
</script>
<input name="button1" type="button" onclick=init() value="初始化">
<input name="button1" type="button" onclick=find() value="查找">
<input name=num value="15000">
<textarea id="textarea1">
</textarea>
我的程序虽然在正常情况比999的要慢,但是相似度大的时候速度差不多,比小梅的速度要快一些
<script language=javascript>
var str=""
function find()
{
var ds = new Date();
var maxNum=0;
var temp=new Object();
str.replace(/[\s\S]/g,function(a){if(!temp[a])temp[a]=0;if(temp[a]++>maxNum)maxNum=a})
var de = new Date();
alert(str.length + " time is " + (de.valueOf() - ds.valueOf()));
alert ("times="+temp[maxNum]+"charater="+maxNum);
}function init()
{
var tempArray=new Array()
var num=document.getElementById("num").value
var numValue="";
for(var i=0;i<num;i++)
{
tempArray[i]=Math.floor(Math.random()*10)
}
str=tempArray.join("");
document.getElementById("textarea1").value=str
}
</script>
<input name="button1" type="button" onclick=init() value="初始化">
<input name="button1" type="button" onclick=find() value="查找">
<input name=num value="15000">
<textarea id="textarea1">
</textarea>
天外的方法是最实在的,一个字符一个字符的处理,出现过就加一,没出现过就设为1.
缺点也在于此,在function中,要处理一次取反,两次判断,一次比较,一次赋值,一次加法,所以导致程序较慢.
我的程序对于高重复性的字符串较有优势,利用正则匹配功能,而且for循环的次数等于出现的字符个数(不重复), 如果用了abcd四个字符,那么只循环四次.如果处理一百万的ascii字符串,天外的算法可能要导致浏览器不响映的.而我的算法可以在几秒左右算完. 对于完全不重复的一百万长度字符串,估计谁的算法都够呛,这是语言问题了. 不过,一百万不重复的字符串,得多少种语言拼出来的啊! 估计还没谁遇到过.
<script language=javascript>
var str=""
function find()
{ var ds = new Date(); //开始计时
if(str=="")return "";
var max=0;
var rs="";
var pos=0;
alert(str.length);
var t="$()*+.[]?\\^{}|";
while(true)
{
var ls=str.length;
var ch=str.charAt(0);
ch=t.indexOf(ch)>=0?"\\"+ch:ch;
str=str.replace(new RegExp("["+eval("ch")+"]","g"),"");
var rps=ls-str.length;
rs += max==rps?ch+":"+max+"\n":"";
rs = rps > max?ch+":"+rps+"\n":rs;
max = rps > max?rps:max;
if(!str)break;
}
alert((new Date()-ds)+"ms\n")//+rs);
}function init()
{
var tempArray=new Array()
var num=document.getElementById("num").value
var numValue="";
for(var i=0;i<num;i++)
{
tempArray[i]=String.fromCharCode(i);
}
str=tempArray.join("");
document.getElementById("textarea1").value=str
}
</script>
<input name="button1" type="button" onclick=init() value="初始化">
<input name="button1" type="button" onclick=find() value="查找">
<input name=num value="15000">
<textarea id="textarea1" style="width:500;height:500">
</textarea>
去掉后 就没问题
但是如果不重复,速度上不去,要5000-6000ms
{
var count={"length":0};
while(str.length>0)
{
var n=str.length;
var s=str.charAt(0);
str=str.replace(new RegExp(s,"g"),"");
n -= str.length;
if(n>count.length){count["key"]=s;count["length"]=n;}
}
alert("字符:"+ count["key"] +" 次数:"+ count["length"]);
}var str="abcdefsdfasdfsdfasdad";
mm(str);
var str="abcdefsdfasdfsdfasd|||||||||||||||||||ad";
就挂了
aaa\
\
\
\
\
\ddd
这样的字符串也找不出来
正想办法呢
function find(str)
{
var ds = new Date(); //开始计时
if(!str)return "";
var max=0;
var slen,ch,tmp,rs;
var reg=new RegExp();
//var t="$()*+.[]?\\^{}|";
while(str)
{
slen=str.length;
ch=str.charAt(0);
tmp=ch.replace(/([\\$()*+.\[\]?\^{}\|])/g,"\\$1");
str=str.replace(reg.compile(tmp, "g"),"");
slen -= str.length;
rs += max==slen?ch+":"+max+"\n":"";
rs = slen > max?ch+":"+slen+"\n":rs;
max = slen > max?slen:max;
}
alert((new Date()-ds)+"ms\n");
//alert((new Date()-ds)+"ms\n"+rs);
}
{
var count={"length":0};
while(str.length>0)
{
var n=str.length;
var s=str.charAt(0);
str=str.replace(new RegExp("\\"+ s,"g"),""); //稍微改造一下就OK了
n -= str.length;
if(n>count.length){count["key"]=s;count["length"]=n;}
}
alert("字符:"+ count["key"] +" 次数:"+ count["length"]);
}var str="abcdefsdfasdfsdfasdad";
mm(str);
这样的怎么办
function mm(str)
{
var count={"key": "", "maxLen":0};
while(str.length>0)
{
var n=str.length;
var s=ss=str.charAt(0);
if("^$|\\+?[]()".indexOf(s)>-1) ss="\\"+ s;
str=str.replace(new RegExp(ss,"g"),"");
n -= str.length; count[s]=n;
if(n>count["maxLen"]){count["key"]=s;count["maxLen"]=n;}
}
alert("字符:"+ count["key"] +" 次数:"+ count["maxLen"]);
}var str="|abcde'\"\\[]{}-()fd\n\nfasdfsdfasd||||||||||||||||||ad";
mm(str);
</script>
我还掉在正则里面想着复杂的处理
<script language="JavaScript">
function _0009(str)
{
var re = /(.)(?!.*\1)/g;
var tmp;
var chr = ""
var len = str.length;
while ((tmp = re.exec(str)) != null)
{
var l = str.replace(new RegExp(("^$|\\+?[]()".indexOf(tmp[0]) == -1 ? "" : "\\") + tmp[0], "g"), "").length;
if(l < len)
{
len = l;
chr = tmp[0];
}
}
document.write(chr + ", " + (str.length - len));
}
_0009("abbbbnncasdfbbnnnwqetbb||||w|||nneqtssssnnnnnnnnsswqet");
</script>
function mm(str)
{
var charArray=str.toUpperCase().split("");
var lengthMap=new Array();
for(var i=charArray.length;i>-1;i--){
(lengthMap[charArray[i]]++) || (lengthMap[charArray[i]]=1);
}
var key='';
var max=0;
for(var i in lengthMap){
if(lengthMap[i]>max) {key=i;max=lengthMap[i];}
}
alert("字符:"+ key +" 次数:"+ max);
}var str="abcdefsfasdfsdfasdad";
mm(str);</script>