面试题17.17 多次搜索

题目描述

给定一个较长字符串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]]

思路

使用前缀树,用smalls构建一颗前缀树,然后在big中遍历,为了减少结尾的讨论,可以加上一个其他非字母

big += "^"

代码

class Trie:
    def __init__(self):
        self.root = {}
    
    def insert(self, word, num):
        cur = self.root
        for w in word:
            if w not in cur:
                cur[w] = {}
            cur = cur[w]
        cur['#'] = num

    
class Solution:
    def multiSearch(self, big: str, smalls: List[str]) -> List[List[int]]:
        trie = Trie()
        root = trie.root
        for i in range(len(smalls)):
            trie.insert(smalls[i],i)
        big += '^'
        res = [[] for _ in range(len(smalls))]
        for i in range(len(big)):
            if big[i] in root:
                cur = root[big[i]]
                for j in range(i+1, len(big)):
                    if '#' in cur:
                        res[cur['#']].append(i)
                    if big[j] in cur:
                        cur = cur[big[j]]
                    else:
                        break
        return res

复杂度分析

  • 时间复杂度:O(n*m),n:big长度,m:max(smalls[i])
  • 空间复杂度:O(m*s),s:公共前缀最多的频率
Spring Boot是一个用于创建独立的、基于Spring的应用程序的框架,而Elasticsearch是一个开源的分布式搜索和分析引擎。将Spring Boot与Elasticsearch集成可以方便地在应用程序中使用Elasticsearch进行全文搜索和数据分析。 要在Spring Boot中集成Elasticsearch,需要进行以下步骤: 1. 添加依赖:在项目的pom.xml文件中添加Elasticsearch的依赖项。例如,可以添加以下依赖项: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 2. 配置连接:在应用程序的配置文件(如application.properties或application.yml)中配置Elasticsearch的连接信息,包括主机名、端口号等。例如: ```properties spring.data.elasticsearch.cluster-nodes=localhost:9200 ``` 3. 创建实体类:创建与Elasticsearch索引对应的实体类,并使用注解标记字段与索引的映射关系。例如: ```java @Document(indexName = "my_index", type = "my_type") public class MyEntity { @Id private String id; @Field(type = FieldType.Text) private String name; // 其他字段... // getter和setter方法... } ``` 4. 创建Repository:创建一个继承自ElasticsearchRepository的接口,用于对实体类进行CRUD操作。例如: ```java public interface MyEntityRepository extends ElasticsearchRepository<MyEntity, String> { // 自定义查询方法... } ``` 5. 使用Elasticsearch:在应用程序中使用自动注入的Repository对象进行数据操作。例如: ```java @Autowired private MyEntityRepository myEntityRepository; public void saveEntity(MyEntity entity) { myEntityRepository.save(entity); } public List<MyEntity> searchEntities(String keyword) { return myEntityRepository.findByName(keyword); } ``` 以上是Spring Boot集成Elasticsearch的基本步骤,你可以根据具体需求进行更多的配置和操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值