题目重点:OA 给数字矩阵和同尺寸小模式,数字格精确匹配、同一字母保持映射一致;选最低行、同行最低列的匹配。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练版不同字母可映到同一个数字,同一字母在一个候选窗口内必须一直映同一个数字;若需双射/不同字母不同数,加反向映射。
- pattern 数字格必须与矩阵相应数值精确相等;矩阵是数字,pattern 混数字或英文字母。
- 遍历所有同尺寸子矩阵,按左上行升序、列升序;首次命中即所求;无命中返回 None。
- 每个候选窗口重新建映射,前一个候选的绑定不能泄漏到下一个。
解题路线
- 先确认 pattern 的字母约束是同字母同值还是不同字母必须不同值,并确认 pattern 中数字字符与矩阵数字 0–9 的编码。
- 外层枚举 r=0..R−P、c=0..C−Q;在窗口内逐格比较:数字格直接比,字母首次见绑定矩阵值,之后必须等于已绑定值。
- 一旦该窗口所有格通过,立即返回 (r,c);行优先遍历保证最低行、同一行最低列。
- 若模式大且候选多,可先用固定数字格做筛选,再考虑二维哈希/索引;字母等值约束使简单哈希不能直接替代验证。
- 测同字母跨多格一致、不同字母同值、数字格冲突、窗口刚好矩阵同大、pattern 大于矩阵和多个匹配的首坐标。
手动走一遍
训练矩阵 [[4,1,4],[2,1,2]]、pattern [[A,1,A]]:在左上 (0,0) 时 A 两次都对应 4,命中并返回 (0,0);若后一个 A 是 3 则该窗口失败。不同字母是否能都映 4 需按现场规则。
规模与取舍
矩阵 R×C、模式 P×Q:至多 (R−P+1)(C−Q+1) 个候选,每个 O(PQ) 检查,总 O((R−P+1)(C−Q+1)PQ) 时间;每候选映射最多 O(PQ) 空间。
易错点与追问
容易失分的边界
- 只比较字母出现位置而不保存同一字母映射。
- 复用上一窗口的映射,导致假阴性。
- 先按列后按行返回,违背 row 优先。
- 未经确认强加不同字母必须不同值。
- pattern 比矩阵大时循环边界为负。
继续深挖
- 不同字母必须映不同数时如何加约束?
- pattern 可旋转/镜像时怎样枚举?
- 大量 pattern 共用一张矩阵如何预处理?
