首先,由样例得出,斜着的 h e h e hehe hehe 是不合法的。那么,就有上下左右四种情况,逐一特判即可(注意要判断是否越界)
#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
char a[1007][1007];
void judr(int i,int j){
if(j+3<=m)
if(a[i][j]=='h'&&a[i][j+1]=='e'&&a[i][j+2]=='h'&&a[i][j+3]=='e')
++ans;
return;
}
void judd(int i,int j){
if(i+3<=n)
if(a[i][j]=='h'&&a[i+1][j]=='e'&&a[i+2][j]=='h'&&a[i+3][j]=='e')
++ans;
return;
}
void judl(int i,int j){
if(j-3>=1)
if(a[i][j]=='h'&&a[i][j-1]=='e'&&a[i][j-2]=='h'&&a[i][j-3]=='e')
++ans;
return;
}
void judu(int i,int j){
if(i-3>=1)
if(a[i][j]=='h'&&a[i-1][j]=='e'&&a[i-2][j]=='h'&&a[i-3][j]=='e')
++ans;
return;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
cin>>a[i][j];
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j){
judr(i,j);//建议写成子程序,这样也方便检查代码
judd(i,j);
judl(i,j);
judu(i,j);
}
cout<<ans<<'\n';
return 0;
}