SWE · CodeSignal OA

Capital One 数字矩阵与字母模式匹配:最早左上坐标

OA 给数字矩阵和同尺寸小模式,数字格精确匹配、同一字母保持映射一致;选最低行、同行最低列的匹配。

题目重点:OA 给数字矩阵和同尺寸小模式,数字格精确匹配、同一字母保持映射一致;选最低行、同行最低列的匹配。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练版不同字母可映到同一个数字,同一字母在一个候选窗口内必须一直映同一个数字;若需双射/不同字母不同数,加反向映射。
  • pattern 数字格必须与矩阵相应数值精确相等;矩阵是数字,pattern 混数字或英文字母。
  • 遍历所有同尺寸子矩阵,按左上行升序、列升序;首次命中即所求;无命中返回 None。
  • 每个候选窗口重新建映射,前一个候选的绑定不能泄漏到下一个。

解题路线

  1. 先确认 pattern 的字母约束是同字母同值还是不同字母必须不同值,并确认 pattern 中数字字符与矩阵数字 0–9 的编码。
  2. 外层枚举 r=0..R−P、c=0..C−Q;在窗口内逐格比较:数字格直接比,字母首次见绑定矩阵值,之后必须等于已绑定值。
  3. 一旦该窗口所有格通过,立即返回 (r,c);行优先遍历保证最低行、同一行最低列。
  4. 若模式大且候选多,可先用固定数字格做筛选,再考虑二维哈希/索引;字母等值约束使简单哈希不能直接替代验证。
  5. 测同字母跨多格一致、不同字母同值、数字格冲突、窗口刚好矩阵同大、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 共用一张矩阵如何预处理?
✓已复制微信号!