刷题记录(Number of Matching Subsequences)

Leecode:Number of Matching Subsequences(JS解答)

在这里插入图片描述
解题思路:这里采用桶排序的思路,先把words数组按照首字母进行分组,例如:[“a”,“bb”,“acd”,“ace”]=》 “a" : “a”,“acd”,“ace”; “b” : “bb”;
然后开始遍历s字符,如examper1中的s:
遍历到s【0】(“a”),words => “c” : “cd”,“ce”; “b” : “bb”;
遍历到s【1】(“b”),words => “c” : “cd”,“ce”; “b” : “b”;
遍历到s【2】(“c”),words => “d” : “d” ; “e” : “e”; “b” : “b”;
,
上代码:

  function numMatchingSubseq(s: string, words: string[]): number {
        let res = 0;
        let mapArr:any[][] = new Array(26);
        let sArr:string[] = s.split("");
        for(let i = 0; i < mapArr.length; i++){
            mapArr[i] = [];
        }
        for(let i = 0; i < words.length; i++){
            let index = words[i].charAt(0).charCodeAt(0) - "a".charCodeAt(0);
            mapArr[index].push(buildNode(words[i]));
        }
        for(let i = 0; i < sArr.length; i++){
            let chooseIndex = sArr[i].charCodeAt(0) - "a".charCodeAt(0);
            let tempArr = mapArr[chooseIndex];
            mapArr[chooseIndex] = [];
            for (let j = 0; j < tempArr.length; j++){
                tempArr[j].index++;
                if(tempArr[j].index == tempArr[j].val.length){
                    res++;
                }else{
                    let newIndex = tempArr[j].val.charAt(tempArr[j].index).charCodeAt(0) - "a".charCodeAt(0);
                    mapArr[newIndex].push(tempArr[j])
                }
            }
            tempArr = [];
        }
        return res;

        function buildNode(val:string):any{
            return {
                val: val,
                index: 0
            }
        }
    };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值