LeetCode-193: Valid Phone Numbers

A comprehensive solution and detailed explanation for solving LeetCode Problem 193: Valid Phone Numbers. This guide includes the problem statement, approach, and code implementation.

193. Valid Phone Numbers

Solution

1grep -E '^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$|^[0-9]{3}-[0-9]{3}-[0-9]{4}$' file.txt

Valid Phone Numbers Explanation

Correct Regular Expressions

Pattern for (xxx) xxx-xxxx:

1^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$

Pattern for xxx-xxx-xxxx:

1^[0-9]{3}-[0-9]{3}-[0-9]{4}$

Example Workflow

Given the input file file.txt containing:

1987-123-4567
2123 456 7890
3(123) 456-7890
4text 123-456-7890
5(123) 456-7890 text

The command processes it as follows:

1grep -E '^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$|^[0-9]{3}-[0-9]{3}-[0-9]{4}$' file.txt

Expected Output

1987-123-4567
2(123) 456-7890

Debugging and Attempts

Original Attempt

1grep -E '^\(\d{3}\) \d{3}-\d{4}$|^\d{3}-\d{3}-\d{4}$' file.txt

Failed due to incorrect digit matching.

Corrected Solution

1grep -E '^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$|^[0-9]{3}-[0-9]{3}-[0-9]{4}$' file.txt

Uses [0-9] instead of \d for better compatibility.

Debugging Script

To verify line-by-line matching:

1while IFS= read -r line; do
2    echo "Checking: '$line'"
3    if echo "$line" | grep -E '^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$|^[0-9]{3}-[0-9]{3}-[0-9]{4}$'; then
4        echo "Matched: $line"
5    else
6        echo "Not Matched: $line"
7    fi
8done < file.txt

Final Thoughts

This solution ensures correct pattern matching for valid phone numbers in the specified formats, using extended regex for better readability and compatibility.

comments powered by Disqus

Recent Updates

See all →