3415. Find Products with Three Consecutive Digits π
Description
Table: Products
+-------------+---------+ | Column Name | Type | +-------------+---------+ | product_id | int | | name | varchar | +-------------+---------+ product_id is the unique key for this table. Each row of this table contains the ID and name of a product.
Write a solution to find all products whose names contain a sequence of exactly three consecutive digits in a row.
Return the result table ordered by product_id in ascending order.
The result format is in the following example.
Note that the name may contain multiple such sequences, but each should have length three.
Example:
Input:
products table:
+-------------+--------------------+ | product_id | name | +-------------+--------------------+ | 1 | ABC123XYZ | | 2 | A12B34C | | 3 | Product56789 | | 4 | NoDigitsHere | | 5 | 789Product | | 6 | Item003Description | | 7 | Product12X34 | +-------------+--------------------+
Output:
+-------------+--------------------+ | product_id | name | +-------------+--------------------+ | 1 | ABC123XYZ | | 5 | 789Product | | 6 | Item003Description | +-------------+--------------------+
Explanation:
- Product 1: ABC123XYZ contains the digits 123.
- Product 5: 789Product contains the digits 789.
- Product 6: Item003Description contains 003, which is exactly three digits.
Note:
- Results are ordered by
product_idin ascending order. - Only products with exactly three consecutive digits in their names are included in the result.
Solutions
Solution 1: Regex Matching
Thinking
We need products whose names contain three consecutive digits. A hand-rolled scan easily misses boundaries between digits and letters or string ends.
A single regular expression covers those cases. The pattern \((^|[^0-9])[0-9]{3}([^0-9]|\))$ matches an isolated run of three digits without treating a longer digit block as several overlapping hits in an uncontrolled way.
We filter the frame with that pattern and sort by \(\textit{product\_id}\) to match the required order.
We can use regular expressions to match product names that contain three consecutive digits.
1 2 3 4 5 | |
1 2 3 4 5 6 7 8 | |