列表

详情


2199. 找到每篇文章的主题

表: Keywords

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| topic_id    | int     |
| word        | varchar |
+-------------+---------+
(topic_id, word) 是该表的主键(具有唯一值的列的组合)。
该表的每一行都包含一个主题的 id 和一个用于表达该主题的词。
可以用多个词来表达同一个主题,也可以用一个词来表达多个主题。

 

表: Posts

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| post_id     | int     |
| content     | varchar |
+-------------+---------+
post_id 是该表的主键(具有唯一值的列)。
该表的每一行都包含一个帖子的 ID 及其内容。
内容仅由英文字母和空格组成。

 

Leetcode 从其社交媒体网站上收集了一些帖子,并对每个帖子的主题感兴趣。每个主题可以由一个或多个关键字表示。如果某个主题的关键字存在于一个帖子的内容中 (不区分大小写),那么这个帖子就有这个主题。

编写解决方案,根据以下规则查找每篇文章的主题:

以 任意顺序 返回结果表。

结果格式如下所示。

 

示例 1:

输入: 
Keywords 表:
+----------+----------+
| topic_id | word     |
+----------+----------+
| 1        | handball |
| 1        | football |
| 3        | WAR      |
| 2        | Vaccine  |
+----------+----------+
Posts 表:
+---------+------------------------------------------------------------------------+
| post_id | content                                                                |
+---------+------------------------------------------------------------------------+
| 1       | We call it soccer They call it football hahaha                         |
| 2       | Americans prefer basketball while Europeans love handball and football |
| 3       | stop the war and play handball                                         |
| 4       | warning I planted some flowers this morning and then got vaccinated    |
+---------+------------------------------------------------------------------------+
输出: 
+---------+------------+
| post_id | topic      |
+---------+------------+
| 1       | 1          |
| 2       | 1          |
| 3       | 1,3        |
| 4       | Ambiguous! |
+---------+------------+
解释: 
1: "We call it soccer They call it football hahaha"
"football" 表示主题 1。没有其他词能表示任何其他主题。

2: "Americans prefer basketball while Europeans love handball and football"
"handball" 表示主题 1。"football" 表示主题 1。
没有其他词能表示任何其他主题。

3: "stop the war and play handball"
"war" 表示主题 3。 "handball" 表示主题 1。
没有其他词能表示任何其他主题。

4: "warning I planted some flowers this morning and then got vaccinated"
这个句子里没有一个词能表示任何主题。注意 “warning” 和 “war” 不同,尽管它们有一个共同的前缀。
所以这篇文章 “Ambiguous!”
请注意,可以使用一个词来表达多个主题。

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
# Write your MySQL query statement below

mysql 解法, 执行用时: 643 ms, 内存消耗: 0 B, 提交时间: 2023-10-15 22:57:29

select post_id, ifnull(group_concat(distinct topic_id order by topic_id), 'Ambiguous!')  as topic
from
    (select post_id, topic_id as topic_id
    from Posts p 
    left join Keywords k 
    on lower(content) like concat('% ',word,' %') or content like concat(word,' %') or content like concat('% ',word)) a 
group by post_id

mysql 解法, 执行用时: 655 ms, 内存消耗: 0 B, 提交时间: 2023-10-15 22:57:07

with t as(
select distinct post_id,topic_id from Keywords,Posts 
where instr(concat(' ',content,' '),concat(' ',word,' '))>0)

select post_id, group_concat(topic_id order by topic_id,'') topic from t group by post_id
union
select P.post_id,'Ambiguous!' from Posts P left join t on P.post_id = t.post_id group by P.post_id having count(t.topic_id)=0

上一题