Skip to content

Latest commit

 

History

History
126 lines (91 loc) · 3.53 KB

File metadata and controls

126 lines (91 loc) · 3.53 KB
comments difficulty edit_url tags
true
简单
数据库

English Version

题目描述

表:Tweets

+----------------+---------+
| Column Name    | Type    |
+----------------+---------+
| tweet_id       | int     |
| content        | varchar |
+----------------+---------+
tweet_id 是这个表的主键(有不同值的列)。
这个表包含某社交媒体 App 中所有的推文。

编写一个解决方案来找到 无效的推文。如果一条推文满足下面 任一 条件会被认为无效:

  • 长度超过 140 个字符。
  • 有超过 3 次提及。
  • 有超过 3 个标签。

以 tweet_id 升序 返回结果表。

查询结果格式如下所示:

 

示例:

输入:

Tweets 表:

  +----------+-----------------------------------------------------------------------------------+
  | tweet_id | content                                                                           |
  +----------+-----------------------------------------------------------------------------------+
  | 1        | Traveling, exploring, and living my best life @JaneSmith @SaraJohnson @LisaTaylor |
  |          | @MikeBrown #Foodie #Fitness #Learning                                             | 
  | 2        | Just had the best dinner with friends! #Foodie #Friends #Fun                      |
  | 4        | Working hard on my new project #Work #Goals #Productivity #Fun                    |
  +----------+-----------------------------------------------------------------------------------+
  

输出:

  +----------+
  | tweet_id |
  +----------+
  | 1        |
  | 4        |
  +----------+
  

解释:

  • tweet_id 1 包含 4 次提及。
  • tweet_id 4 包含 4 个标签。
输出表以 tweet_id 升序排序。

解法

方法一:LENGTH() 函数 + REPLACE() 函数

我们可以使用 LENGTH() 函数计算字符串的长度,计算排除掉 @# 之后的长度,然后使用 OR 运算符连接这三个条件,筛选出对应的 tweet_id,并按照 tweet_id 升序排序。

MySQL

# Write your MySQL query statement below
SELECT tweet_id
FROM Tweets
WHERE
    LENGTH(content) > 140
    OR (LENGTH(content) - LENGTH(REPLACE(content, '@', ''))) > 3
    OR (LENGTH(content) - LENGTH(REPLACE(content, '#', ''))) > 3
ORDER BY 1;

Python3

import pandas as pd


def find_invalid_tweets(tweets: pd.DataFrame) -> pd.DataFrame:
    invalid_tweets = tweets[
        (tweets["content"].str.len() > 140)
        | (tweets["content"].str.count("@") > 3)
        | (tweets["content"].str.count("#") > 3)
    ].sort_values(by="tweet_id")
    return invalid_tweets[["tweet_id"]]