Leetcode 3103. 查找热门话题标签 II

1.题目基本信息

1.1.题目描述

表:Tweets

+-------------+---------+

| Column Name | Type |

+-------------+---------+

| user_id | int |

| tweet_id | int |

| tweet_date | date |

| tweet | varchar |

+-------------+---------+

tweet_id 是这张表的主键 (值互不相同的列)。

这张表的每一行都包含 user_id, tweet_id, tweet_date 和 tweet。

题目保证所有 tweet_date 都是 2024 年 2 月的合法日期。

编写一个解决方案来找到 2024 年 二月 的 前 3 热门话题 标签。一条推文可能含有 多个标签。

返回结果表,根据标签的数量和名称 降序 排序。

1.2.题目地址

https://leetcode.cn/problems/find-trending-hashtags-ii/description/

2.解题方法

2.1.解题思路

递归

2.2.解题步骤

第一步,递归的从tweet中提取标签

1.1.获取推特中的第一个标签(递归初始化)

1.2.递归主体

第二步,统计各个标签的id数量,并取前三个

3.解题代码

sql代码

# Write your MySQL query statement below
# 知识点:SUBSTRING_INDEX(field,sep,count),如果count为正,返回field字符串中从左侧数起第count个sep分隔符前面的字符子串,如果count为负,返回field字符串中从右侧数起第-count个sep分隔符后面的字符子串。TRIM([LEADING|TRAILING] str1 FROM field),从field串的前面或者后面删除str1字符串
# 第一步,递归的从tweet中提取标签
WITH RECURSIVE t1 AS (
    # 1.1.获取推特中的第一个标签(递归初始化)
    SELECT 
        tweet_id, 
        SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(tweet, '#', 2), '#', -1), ' ', 1) as tag, 
        TRIM(LEADING SUBSTRING_INDEX(tweet, '#', 2) FROM tweet) AS remain_tags
    FROM Tweets
    WHERE tweet LIKE '%#%' AND YEAR(tweet_date) = 2024 AND MONTH(tweet_date) = 2
        UNION ALL
    # 1.2.递归主体
    SELECT 
        tweet_id, 
        SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(remain_tags, '#', 2), '#', -1), ' ', 1) as tag, 
        TRIM(LEADING SUBSTRING_INDEX(remain_tags, '#', 2) FROM remain_tags) AS remain_tags
    FROM t1
    WHERE remain_tags LIKE '%#%'
)

# 第二步,统计各个标签的id数量,并取前三个
SELECT 
    CONCAT('#', tag) AS hashtag, 
    COUNT(tweet_id) AS count
FROM t1
GROUP BY tag
ORDER BY count DESC, tag DESC
LIMIT 3

4.执行结果

posted @ 2025-05-25 08:29  Geek0070  阅读(27)  评论(0)    收藏  举报