mirror of https://github.com/doocs/leetcode.git
|
…
|
||
|---|---|---|
| .. | ||
| README.md | ||
| README_EN.md | ||
| Solution.py | ||
| Solution.sql | ||
README_EN.md
| comments | difficulty | edit_url | tags | |
|---|---|---|---|---|
| true | Easy | https://github.com/doocs/leetcode/edit/main/solution/3400-3499/3436.Find%20Valid%20Emails/README_EN.md |
|
3436. Find Valid Emails
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.comcontains 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