3078. Match Alphanumerical Pattern in Matrix I π
Description
You are given a 2D integer matrix board
and a 2D character matrix pattern
. Where 0 <= board[r][c] <= 9
and each element of pattern
is either a digit or a lowercase English letter.
Your task is to find a submatrix of board
that matches pattern
.
An integer matrix part
matches pattern
if we can replace cells containing letters in pattern
with some digits (each distinct letter with a unique digit) in such a way that the resulting matrix becomes identical to the integer matrix part
. In other words,
- The matrices have identical dimensions.
- If
pattern[r][c]
is a digit, thenpart[r][c]
must be the same digit. - If
pattern[r][c]
is a letterx
:- For every
pattern[i][j] == x
,part[i][j]
must be the same aspart[r][c]
. - For every
pattern[i][j] != x
,part[i][j]
must be different thanpart[r][c]
.
- For every
Return an array of length 2
containing the row number and column number of the upper-left corner of a submatrix of board
which matches pattern
. If there is more than one such submatrix, return the coordinates of the submatrix with the lowest row index, and in case there is still a tie, return the coordinates of the submatrix with the lowest column index. If there are no suitable answers, return [-1, -1]
.
Example 1:
1 | 2 | 2 |
2 | 2 | 3 |
2 | 3 | 3 |
a | b |
b | b |
Input: board = [[1,2,2],[2,2,3],[2,3,3]], pattern = ["ab","bb"]
Output: [0,0]
Explanation: If we consider this mapping: "a" -> 1
and "b" -> 2
; the submatrix with the upper-left corner (0,0)
is a match as outlined in the matrix above.
Note that the submatrix with the upper-left corner (1,1) is also a match but since it comes after the other one, we return [0,0]
.
Example 2:
1 | 1 | 2 |
3 | 3 | 4 |
6 | 6 | 6 |
a | b |
6 | 6 |
Input: board = [[1,1,2],[3,3,4],[6,6,6]], pattern = ["ab","66"]
Output: [1,1]
Explanation: If we consider this mapping: "a" -> 3
and "b" -> 4
; the submatrix with the upper-left corner (1,1)
is a match as outlined in the matrix above.
Note that since the corresponding values of "a"
and "b"
must differ, the submatrix with the upper-left corner (1,0)
is not a match. Hence, we return [1,1]
.
Example 3:
1 | 2 |
2 | 1 |
x | x |
Input: board = [[1,2],[2,1]], pattern = ["xx"]
Output: [-1,-1]
Explanation: Since the values of the matched submatrix must be the same, there is no match. Hence, we return [-1,-1]
.
Constraints:
1 <= board.length <= 50
1 <= board[i].length <= 50
0 <= board[i][j] <= 9
1 <= pattern.length <= 50
1 <= pattern[i].length <= 50
pattern[i][j]
is either a digit represented as a string or a lowercase English letter.
Solutions
Solution 1: Enumeration
Let's denote $m$ and $n$ as the number of rows and columns in the matrix board
, and $r$ and $c$ as the number of rows and columns in the matrix pattern
.
We can enumerate each possible sub-matrix's top-left position $(i, j)$ in the board
from small to large, and then determine whether the $r \times c$ sub-matrix with $(i, j)$ as the top-left corner matches pattern
. If we find a matching sub-matrix, we return $(i, j)$. Otherwise, we return $(-1, -1)$.
The time complexity is $O(m \times n \times r \times c)$, where $m$ and $n$ are the number of rows and columns in the matrix board
, and $r$ and $c$ are the number of rows and columns in the matrix pattern
. The space complexity is $O(|\Sigma|)$, where $\Sigma$ is the character set. In this problem, $\Sigma$ includes numbers and lowercase letters, so $|\Sigma| \leq 36$.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
|