首页 > 其他分享 >leetcode面试题 17.17. 多次搜索

leetcode面试题 17.17. 多次搜索

时间:2024-11-18 13:47:54浏览次数:3  
标签:smalls big 面试题 children let 17.17 small now leetcode

给定一个较长字符串big和一个包含较短字符串的数组smalls,设计一个方法,根据smalls中的每一个较短字符串,对big进行搜索。输出smalls中的字符串在big里出现的所有位置positions,其中positions[i]smalls[i]出现的所有位置。

示例:

输入:
big = "mississippi"
smalls = ["is","ppi","hi","sis","i","ssippi"]
输出: [[1,4],[8],[],[3],[1,4,7,10],[5]]

提示:

  • 0 <= len(big) <= 1000
  • 0 <= len(smalls[i]) <= 1000
  • smalls的总字符数不会超过 100000。
  • 你可以认为smalls中没有重复字符串。
  • 所有出现的字符均为英文小写字母。
/**
 * @param {string} big
 * @param {string[]} smalls
 * @return {number[][]}
 */
function TreeNode(val){
    this.val = val || null;
    this.children = {};
}
var multiSearch = function(big, smalls) {
    const res = smalls.map(() => []);
    if(!big){
        return res;
    }
    let Tree = new TreeNode();
    let now;
    smalls.forEach((small,index) =>{
        now = Tree;
        for(let i = 0;i < small.length;i++){
            if(!now.children[small[i]]){
                now.children[small[i]] = new TreeNode(small[i]);
            }
            now = now.children[small[i]];
        }
        now.children['last'] = index;
    })
    for(let i = 0;i < big.length;i++){
        let now = Tree;
        for(let j = i;i < big.length;j++){
            if(!now.children[big[j]]){
                break;
            }
            now = now.children[big[j]];
            if(now.children.last !== undefined){
                res[now.children.last].push(i)
            }
        }
    }
    return res;
};

标签:smalls,big,面试题,children,let,17.17,small,now,leetcode
From: https://blog.csdn.net/Turboyiyi/article/details/143855077

相关文章

  • leetcode1963. 使字符串平衡的最小交换次数
    给你一个字符串 s ,下标从0开始 ,且长度为偶数 n 。字符串 恰好 由 n/2 个开括号 '[' 和 n/2 个闭括号 ']' 组成。只有能满足下述所有条件的字符串才能称为 平衡字符串 :字符串是一个空字符串,或者字符串可以记作 AB ,其中 A 和 B 都是 平衡字符串......
  • leetcode1161. 最大层内元素和
    给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。请返回层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。示例1:输入:root=[1,7,0,7,-8,null,null]输出:2解释:第1层各元素之和为1,第......
  • leetcode211. 添加与搜索单词 - 数据结构设计
    请你设计一个数据结构,支持添加新单词和查找字符串是否与任何先前添加的字符串匹配。实现词典类 WordDictionary :WordDictionary() 初始化词典对象voidaddWord(word) 将 word 添加到数据结构中,之后可以对它进行匹配boolsearch(word) 如果数据结构中存在字符串与......
  • leetcode 扫描线专题 06-leetcode.836 rectangle-overlap 力扣.836 矩形重叠
    题目矩形以列表[x1,y1,x2,y2]的形式表示,其中(x1,y1)为左下角的坐标,(x2,y2)是右上角的坐标。矩形的上下边平行于x轴,左右边平行于y轴。如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。给出两个矩形rec1和rec2。如果它......
  • leetcode 扫描线专题 06-leetcode.391 perfect-rectangle 力扣.391 完美矩形
    题目给你一个数组rectangles,其中rectangles[i]=[xi,yi,ai,bi]表示一个坐标轴平行的矩形。这个矩形的左下顶点是(xi,yi),右上顶点是(ai,bi)。如果所有矩形一起精确覆盖了某个矩形区域,则返回true;否则,返回false。示例1:输入:rectangles=[[1,1,3,3],[3,1,4,2],......
  • LeetCode题练习与总结:二进制手表--401
    一、题目描述二进制手表顶部有4个LED代表 小时(0-11),底部的6个LED代表 分钟(0-59)。每个LED代表一个0或1,最低位在右侧。例如,下面的二进制手表读取 "4:51" 。给你一个整数 turnedOn ,表示当前亮着的LED的数量,返回二进制手表可以表示的所有可能时间。你可以......
  • LeetCode题练习与总结:移掉 K 位数字--402
    一、题目描述给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。 示例1:输入:num="1432219",k=3输出:"1219"解释:移除掉三个数字4,3,和2形成一个新的最小的数字1219。......
  • Leetcode 3352. Count K-Reducible Numbers Less Than N
    Leetcode3352.CountK-ReducibleNumbersLessThanN1.解题思路2.代码实现题目链接:3352.CountK-ReducibleNumbersLessThanN1.解题思路这一题的话思路上我是拆成了两步来做的,首先,我们要认识到,这里的变化本质就是看数的二进制表达当中有多少个1,因此,假设给定......
  • 一些Leetcode关于双指针的简单题解
    26.删除有序数组中的重复项给你一个非严格递增排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为k,你需要做以下事情确保......
  • Leetcode141-环形链表
    思路链表判环方法:快慢指针法其实没那么高级,很简单的理解就是,采用两个指针,一个每次走两步,一个每次走一步,如果链表有环,那么每次走两步的指针,也就是走得快的指针一定会追上走得慢指针。代码第一种写法://写法1publicclassSolution{publicbooleanhasCycle(ListN......