小美定义一个矩阵是好矩阵,当且仅当该矩阵满足: 1. 矩阵仅由'A'、'B'、'C'三种字符组成。且三种字符都出现过。 2. 矩阵相邻的字符都不相等。 现在给定一个 n*m 的矩阵,小美想知道有多少个3*3的子矩阵是好矩阵,你能帮帮她吗?
第一行输入两个整数 n,m ,代表矩阵的行数和列数。 接下来的 n 行,每行输入一个仅包含大写字母的长度为 m 的字符串。 1≤ n,m ≤ 1000
输出一个整数表示答案。
4 4 DABC ABAB BABA BBAB
1
考点:穷举
数据规模 n ≤ 1e3 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:穷举
本题切入点
枚举矩阵中每个 3×3 子矩阵,检查是否「三种字符都出现」且「相邻字符都不相等」,规模 n,m ≤ 1000 可行。
把候选答案空间全部列出来逐一检验,靠数据范围小来兜底。
思路框架(穷举 通法 · 非本题专属)
实现要点:多重循环是最直接的写法;枚举组合时可用递归 + 回溯,或用位掩码代表子集。
复杂度:时间 O(候选数 × 单次校验代价) | 空间 O(1)
该范式的通法易错点
对照本题
样例 1:输入 4 4 / DABC / ABAB / BABA / BBAB → 输出 1
有4个3*3的子矩阵。
左上角的子矩阵出现了'D',因此不合法。
右上角的是好矩阵。
左下角的存在两个相邻的字母相同,因此不合法。
右下角的子矩阵里没有'C',因此不合法。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2023年美团秋招编程岗第一批笔试。