Count same-color squares in a character grid
Company: Google
Role: Software Engineer
Category: Coding & Algorithms
Difficulty: hard
Interview Round: Technical Screen
Quick Answer: This question evaluates understanding of 2D array manipulation, spatial pattern detection, and algorithmic counting with attention to time and space complexity.
Constraints
- 0 <= len(grid) <= 1000
- If grid is non-empty, 0 <= len(grid[0]) <= 1000
- All rows in grid have the same length
- grid[i][j] is an alphabetic character
- The total number of cells is at most 1,000,000
Examples
Input: ([])
Expected Output: 0
Explanation: An empty grid contains no squares.
Input: (["aab", "aab", "bbb"])
Expected Output: 10
Explanation: There are 9 single-cell squares and one 2x2 monochromatic square of 'a' in the top-left corner.
Input: (["xxx", "xxx"])
Expected Output: 8
Explanation: There are 6 single-cell squares and 2 monochromatic 2x2 squares.
Input: (["ab", "ba"])
Expected Output: 4
Explanation: Only the four 1x1 squares are monochromatic; the 2x2 square contains different characters.
Input: (["aaaa"])
Expected Output: 4
Explanation: A single-row grid can only contain 1x1 squares, so all four cells count.
Input: (["AAA", "AAA", "AAA"])
Expected Output: 14
Explanation: All cells have the same color: 9 squares of size 1x1, 4 of size 2x2, and 1 of size 3x3.
Input: (["bbbb", "bbbb", "bbba"])
Expected Output: 18
Explanation: There are 12 single-cell squares, 5 monochromatic 2x2 squares, and 1 monochromatic 3x3 square.
Hints
- Try defining dp[i][j] as the side length of the largest monochromatic square whose bottom-right corner is cell (i, j).
- A square larger than 1 can end at (i, j) only if the current cell matches its top, left, and top-left neighboring cells.