给你一个近义词表 synonyms 和一个句子 textsynonyms 表中是一些近义词对 ,你可以将句子 text 中每个单词用它的近义词来替换。

请你找出所有用近义词替换后的句子,按 字典序排序 后返回。

示例 1:

输入:
synonyms = [["happy","joy"],["sad","sorrow"],["joy","cheerful"]],
text = "I am happy today but was sad yesterday"
输出:
["I am cheerful today but was sad yesterday",
"I am cheerful today but was sorrow yesterday",
"I am happy today but was sad yesterday",
"I am happy today but was sorrow yesterday",
"I am joy today but was sad yesterday",
"I am joy today but was sorrow yesterday"]

提示:

  • 0 <= synonyms.length <= 10
  • synonyms[i].length == 2
  • synonyms[0] != synonyms[1]
  • 所有单词仅包含英文字母,且长度最多为 10
  • text 最多包含 10 个单词,且单词间用单个空格分隔开。

解题思路

首先观察题目,发现相同近义词可能有很多个,所以不难想到通过并查集找到所有的集合。然后单词替换问题,实际上就是Leetcode 78:子集(最详细的解法!!!)。

class Solution:def generateSentences(self, synonyms: List[List[str]], text: str) -> List[str]:parent = collections.defaultdict(str)data = collections.defaultdict(list)def find(x):if x not in parent:parent[x] = xif x != parent[x]:parent[x] = find(parent[x])return parent[x]for p, q in synonyms:x, y = find(p), find(q)if x != y:parent[x] = yfor k in parent:data[find(k)].append(k)res, texList = set(), text.split(" ")def dfs(index, path):res.add(" ".join(path))for i in range(index, len(texList)):for t in data[find(texList[i])]:cur = path[:]cur[i] = tdfs(i + 1, cur)dfs(i + 1, path)dfs(0, texList)return sorted(list(res))

更加简洁的写法

class Solution:def generateSentences(self, synonyms: List[List[str]], text: str) -> List[str]:parent = collections.defaultdict(str)data = collections.defaultdict(list)def find(x):if x not in parent:parent[x] = xif x != parent[x]:parent[x] = find(parent[x])return parent[x]for p, q in synonyms:x, y = find(p), find(q)if x != y:parent[x] = yfor k in parent:data[find(k)].append(k)res = [[]]for w in text.split(" "):res = [it + [v] for it in res for v in data[find(w)] or [w]]return sorted([" ".join(it) for it in res])

reference:

https://leetcode.com/problems/synonymous-sentences/discuss/430534/Python-bfs-solution

我将该问题的其他语言版本添加到了我的GitHub Leetcode

如有问题,希望大家指出!!!

Leetcode 1258:近义词句子(超详细的解法!!!)相关推荐

  1. LeetCode 1258. 近义词句子(哈希+并查集+排序+回溯)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个近义词表 synonyms 和一个句子 text , synonyms 表中是一些近义词对 ,你可以将句子 text 中每个单词用它的近义词来替换 ...

  2. JAVA程序设计:近义词句子(LeetCode:5110)

    给你一个近义词表 synonyms 和一个句子 text , synonyms 表中是一些近义词对 ,你可以将句子 text 中每个单词用它的近义词来替换. 请你找出所有用近义词替换后的句子,按 字典 ...

  3. LeetCode-Python-1258. 近义词句子 ( DFS)

    给你一个近义词表 synonyms 和一个句子 text , synonyms 表中是一些近义词对 ,你可以将句子 text 中每个单词用它的近义词来替换. 请你找出所有用近义词替换后的句子,按 字典 ...

  4. 5110. 近义词句子

    给你一个近义词表 synonyms 和一个句子 text , synonyms 表中是一些近义词对 ,你可以将句子 text 中每个单词用它的近义词来替换. 请你找出所有用近义词替换后的句子,按 字典 ...

  5. 【每天一道算法题】近义词句子

    本文首发于我的公众号码农之屋(id: Spider1818),专注于干货分享,包含但不限于Java编程.网络技术.Linux内核及实操.容器技术等.欢迎大家关注,二维码文末可以扫. 题目描述 给你一个 ...

  6. Leetcode 37:解数独(超详细的解法!!!)

    编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 3x3 ...

  7. Leetcode 739:每日温度(超详细的解法!!!)

    根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数.如果之后都不会升高,请输入 0 来代替. 例如,给定一个列表 temperatures = [73, 74 ...

  8. Leetcode 1134:阿姆斯特朗数(超详细的解法!!!)

    假设存在一个 k 位数 N,其每一位上的数字的 k 次幂的总和也是 N,那么这个数是阿姆斯特朗数. 给你一个正整数 N,让你来判定他是否是阿姆斯特朗数,是则返回 true,不是则返回 false. 示 ...

  9. Leetcode 1419:数青蛙(超详细的解法!!!)

    给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 "croak" )的组合.由于同一时间可以有多只青蛙呱呱作响,所以 croakOfFrogs 中会混合 ...

最新文章

  1. 快速找出高价值用户,3分钟学会RFM模型分析
  2. 2002: [Hnoi2010]Bounce 弹飞绵羊
  3. 计算机应用技术教程的答案,计算机应用技术教程第3章办公自动化答案
  4. xmpp协议框架包介绍:org.xmpp.packet.Packet+JID+PacketInterceptor+Session
  5. JPA – Hibernate –包级别的类型映射
  6. 删除单链表中倒是第K个结点
  7. 「PPT模板」 商务UI风格
  8. Markdown中的特殊符号
  9. IDEA打包jar-解决错误: 找不到或无法加载主类 main
  10. MG513P30 12V直流减速电机编码器电线与杜邦线焊接教程
  11. 使用Scrapy爬取图书网站信息
  12. 为什么说暴雪必须“手游化”?
  13. 应届毕业生找软件测试工作实习的心得(一)
  14. python处理svg_用Python/PIL读取SVG文件
  15. springMVC源码分析--HandlerMethod
  16. 最新版 苹果 IOS AppStore证书申请全流程 包括p12文件
  17. B站网页版播放常用快捷键
  18. 【总结】北大2018冬令营题目总结
  19. 向量的平面投影 ProjectOnPlane
  20. 门窗生产工厂MES系统,功能需求说明文档

热门文章

  1. 国产单片机有盗版吗? 侵权了吗?
  2. 计算机初级职称考试试题,2016年职称计算机考试题库
  3. [创业-17]:财务报表之综述
  4. Android Studio连接自带模拟器失败怎么办?强烈建议使用第三方模拟器(含各类模拟器下载地址)
  5. [附源码]JSP+ssm计算机毕业设计分时租赁共享汽车系统dm1jn【源码、数据库、LW、部署】
  6. 众筹平台建立步骤有哪些
  7. 儿童编程软件python征服_这个可能打败Python的编程语言,正在征服科学界
  8. mfc 主窗口 缩小 放大 关闭 按钮
  9. python科学计算代码库_科学计算库Numpy,(示例代码)
  10. 秒杀理解Kafka原理