js小题狂练(3)-一个字符串中出现次数最多的字符

这个题还是挺常见的,做C++的题中算是很基础的题了,js的话略现不同,要么用自己的小hash要么用排序和js的函数

法一:小hash版,直接记录每个字符的出现次数保存到数组里面

function timestset(str){
    var hash={};
    for(var i=0;i<str.length;i++)
    {
        if(!hash[str[i]])
            hash[str[i]]=1;
        else
            hash[str[i]]++;
    }
    var maxn=-1;
    var res;
    for(var i in hash)
        if(hash[i]>maxn){
            maxn=hash[i];
            res=i;
        }
    //console.log("出现次数最多的字母是"+res+"出现了"+maxn+"次");
    return maxn;
}

法二:先进行排序,每个单独字母的尾位置-头位置

function timestset(str){
    var res;
    var maxn=-1;
    str=[...str];
    str.sort();
    str=str.join("");
    for(var i=0;i<str.length-1;i++)
    {
        if(str[i]==str[i+1]) continue;
        if(str.lastIndexOf(str[i])-str.indexOf(str[i])+1>maxn)
        {
            res=str[i];
            maxn=str.lastIndexOf(str[i])-str.indexOf(str[i])+1;
        }
    }
    //console.log("出现次数最多的字母是"+res+"出现了"+maxn+"次");
    return maxn;
}

测试:

var str = 'asdfssaaasasasasaa';
timestset( str);
PS:其实我们在计算出了maxn后,其实应该代回到数组数组看看哪些字母是最大值(因为最大值可以并列),这里就忽略了这一步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值