Equal Row and Column Pairs

array hash-table matrix simulation

Description

Given a 0-indexed n x n integer matrix grid, return the number of pairs (ri, cj) such that row ri and column cj are equal. A row and column pair is considered equal if they contain the same elements in the same order (i.e., an equal array).

Example 1:
Input: grid = [[3,2,1],[1,7,6],[2,7,7]]
Output: 1
Explanation: There is 1 equal row and column pair:
- (Row 2, Column 1): [2,7,7]

Example 2:
Input: grid = [[3,1,2,2],[1,4,4,5],[2,4,2,2],[2,4,2,2]]
Output: 3
Explanation: There are 3 equal row and column pairs:
- (Row 0, Column 0): [3,1,2,2]
- (Row 2, Column 2): [2,4,2,2]
- (Row 3, Column 2): [2,4,2,2]

Constraints

  • n == grid.length == grid[i].length
  • 1 <= n <= 200
  • 1 <= grid[i][j] <= 10^5

Complexity

Show Complexity
  • Time: O(n^3) or O(n^2) with hashing
  • Space: O(n^2)

Hints

Show Hints
Pattern
Hash map with tuple/string keys
Approach
Convert rows to tuples and store in a Counter. Then for each column, check if it exists in the Counter and add the count.
Complexity
Hash each row and column, then count matches

Solutions

Show PY Solution
from collections import defaultdict


def solution(grid: list[list[int]]) -> int:
    mr = defaultdict(int)
    mc = defaultdict(int)
    for r in range(len(grid)):
        mr[tuple(grid[r])] += 1
        cs = []
        for r2 in range(len(grid)):
            cs.append(grid[r2][r])
        mc[tuple(cs)] += 1

    count = 0
    for k, v in mr.items():
        count += mc[k] * v

    # print(mr, mc)

    return count