leetcode-每日一题648. 单词替换(哈希)

简介: 将字符串数组中的所有字符串存入哈希表中,遍历sentence中的所有单词,从短到长遍历单词前缀,对比哈希表中的单词是否存在,存在则替换。

1264340f1237410fa1ea3b0eade3264c.png


题目链接:https://leetcode.cn/problems/replace-words/


思路


方法:哈希匹配


直观想法


将字符串数组中的所有字符串存入哈希表中,遍历sentence中的所有单词,从短到长遍历单词前缀,对比哈希表中的单词是否存在,存在则替换。


算法


1.将dictionary字符串数组中的所有字符串存入哈希表mps中


2.用strings.Split方法以空格为分隔符,将单词分割成字符串数组,遍历数组

1) 从短到长匹配哈希表中,找到单词的最短词根,将单词替换


3.用strings.Join方法将字符串数组以空格为分隔符拼接回来


代码示例


func replaceWords(dictionary []string, sentence string) string {
    mps := map[string]bool{}
    for i := range dictionary{
        mps[dictionary[i]] = true
    }
    str := strings.Split(sentence, " ")
    for i := range str{
        for j := 1; j <= len(str[i]); j++{
            if mps[str[i][:j]] == true{
                str[i] = str[i][:j]
                break
            }
        }
    }
    return strings.Join(str, " ")
}


c82b2b2a1ed347919e7534a710fe787d.png


复杂度分析


  • 时间复杂度:O(n + ∑wi2) 其中n表示dictionary的单词数量,构建哈希集合消耗 O(n)时间,wi是 sentence 分割后第 ii 个单词的字符数,判断单词的前缀子字符串是否位于哈希集合中消耗 O(wi2)


  • 空间复杂度:O(n + s) 其中n表示dictionary的单词数量,构建哈希集合消耗 O(n)空间,s表示 sentence 分割的出来的单词数量,消耗O(s)的空间
目录
相关文章
|
1月前
|
算法
LeetCode第58题最后一个单词的长度
LeetCode第58题"最后一个单词的长度"的解题方法,通过从字符串末尾向前遍历并计数非空格字符,直接得出最后一个单词的长度。
LeetCode第58题最后一个单词的长度
|
1月前
|
算法 JavaScript Python
【Leetcode刷题Python】79. 单词搜索和剑指 Offer 12. 矩阵中的路径
Leetcode第79题"单词搜索"的Python解决方案,使用回溯算法在给定的二维字符网格中搜索单词,判断单词是否存在于网格中。
21 4
|
1月前
|
Python
【Leetcode刷题Python】生词本单词整理
文章提供了一个Python程序,用于帮助用户整理和排版生词本上的单词,包括去除重复单词、按字典序排序,并按照特定的格式要求进行打印排版。
21 3
|
1月前
|
Python
【Leetcode刷题Python】318. 最大单词长度乘积
本文提供了LeetCode题目318的Python编程解决方案,题目要求在一个字符串数组中找出两个不含有公共字母的单词,且这两个单词的长度乘积最大,如果不存在这样的两个单词,则返回0。
12 0
|
3月前
|
算法
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
|
3月前
|
算法 数据挖掘 开发者
LeetCode题目55:跳跃游戏【python5种算法贪心/回溯/动态规划/优化贪心/索引哈希映射 详解】
LeetCode题目55:跳跃游戏【python5种算法贪心/回溯/动态规划/优化贪心/索引哈希映射 详解】
|
3月前
|
存储 SQL 算法
LeetCode题58: 5种算法实现最后一个单词的长度【python】
LeetCode题58: 5种算法实现最后一个单词的长度【python】
|
3月前
|
算法 测试技术 索引
力扣经典150题第三十二题:串联所有单词的子串
力扣经典150题第三十二题:串联所有单词的子串
17 0
|
3月前
|
算法
力扣经典150题第二十一题:反转字符串中的单词
力扣经典150题第二十一题:反转字符串中的单词
32 0
|
3月前
|
算法
力扣经典150题第十九题:最后一个单词的长度
力扣经典150题第十九题:最后一个单词的长度
22 0