对于“Moo”,是一种“ABB”的形式,所以我们可以找出所有ABB形式的字符串,并且把相对应的这个字符串次数加一。
最后统计出每一种“ABB”形式的字符串中次数最多的是多少即可。
#include<bits/stdc++.h>
using namespace std;
map< pair<char, char>, int> q;
int n, m, ans;
char a[60][60];
const int dx[8] = {-1, 1, 0, 0, -1, -1, 1, 1}, dy[8] = {0, 0, -1, 1, -1, 1, -1, 1};
void dfs(int x, int y) {
for (int i = 0; i < 8; i++) {
int x1 = x + dx[i], y1 = y + dy[i];
int x2 = x1 + dx[i], y2 = y1 + dy[i]; //走两次
if(x1 > 0 && x1 <= n && x2 > 0 && x2 <= n && y1 > 0 && y1 <= m && y2 > 0 && y2 <= m
&& a[x][y] != a[x1][y1] && a[x1][y1] == a[x2][y2]) q[{a[x][y], a[x1][y1]}]++; //满足条件
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> (a[i] + 1);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) dfs(i, j);
for (auto &[x, res] : q) //map的遍历
if (x.first != 'M' && x.second != 'O') ans = max(ans, res);
printf("%d", ans);
return 0;
}