Skip to content

Latest commit

 

History

History
128 lines (93 loc) · 3.65 KB

File metadata and controls

128 lines (93 loc) · 3.65 KB
comments true
difficulty Easy
edit_url https://github.com/doocs/leetcode/edit/main/solution/3400-3499/3436.Find%20Valid%20Emails/README_EN.md
tags
Database

中文文档

Description

Table: Users

+-----------------+---------+
| Column Name     | Type    |
+-----------------+---------+
| user_id         | int     |
| email           | varchar |
+-----------------+---------+
(user_id) is the unique key for this table.
Each row contains a user's unique ID and email address.

Write a solution to find all the valid email addresses. A valid email address meets the following criteria:

  • It contains exactly one @ symbol.
  • It ends with .com.
  • The part before the @ symbol contains only alphanumeric characters and underscores.
  • The part after the @ symbol and before .com contains a domain name that contains only letters.

Return the result table ordered by user_id in ascending order.

 

Example:

Input:

Users table:

+---------+---------------------+
| user_id | email               |
+---------+---------------------+
| 1       | alice@example.com   |
| 2       | bob_at_example.com  |
| 3       | charlie@example.net |
| 4       | david@domain.com    |
| 5       | eve@invalid         |
+---------+---------------------+

Output:

+---------+-------------------+
| user_id | email             |
+---------+-------------------+
| 1       | alice@example.com |
| 4       | david@domain.com  |
+---------+-------------------+

Explanation:

  • alice@example.com is valid because it contains one @, alice is alphanumeric, and example.com starts with a letter and ends with .com.
  • bob_at_example.com is invalid because it contains an underscore instead of an @.
  • charlie@example.net is invalid because the domain does not end with .com.
  • david@domain.com is valid because it meets all criteria.
  • eve@invalid is invalid because the domain does not end with .com.

Result table is ordered by user_id in ascending order.

Solutions

Solution 1: Regular Expression

We can use a regular expression with REGEXP to match valid email addresses.

The time complexity is $O(n)$, and the space complexity is $O(1)$. Here, $n$ is the length of the input string.

MySQL

# Write your MySQL query statement below
SELECT user_id, email
FROM Users
WHERE email REGEXP '^[A-Za-z0-9_]+@[A-Za-z][A-Za-z0-9]*\\.com$'
ORDER BY 1;

Pandas

import pandas as pd


def find_valid_emails(users: pd.DataFrame) -> pd.DataFrame:
    email_pattern = r"^[A-Za-z0-9_]+@[A-Za-z][A-Za-z0-9]*\.com$"
    valid_emails = users[users["email"].str.match(email_pattern)]
    valid_emails = valid_emails.sort_values(by="user_id")
    return valid_emails