P6338 题解
yeshubo_qwq · · 题解
题面
题意
找到并输出长度至少为
思路
暴力枚举每一个位置,看它是否能够成为字母串的开头。
如果可以,就取这个字母串,并与上次答案取最小。
具体细节请看代码。
代码
#include<bits/stdc++.h>
using namespace std;
int n,m,i,j,y;
char a[25][25];
string x,ans="{";//既然最大字母是z,就取一个比z大的字符{作为初始最大值即可
int main(){
cin>>n>>m;
for(i=0;i<=n;i++)a[i][0]='#';//初始化,围一圈栅栏,否则会导致下面判断字母串的开头时错误
for(i=0;i<=m;i++)a[0][i]='#';
for(i=1;i<=n;i++)cin>>a[i]+1;
for(i=1;i<=n;i++)//暴力枚举每一个位置
for(j=1;j<=m;j++){
if(a[i][j]>='a'&&a[i][j]<='z'&&a[i][j-1]=='#'){//是从左到右的字母串的开头
x="";y=j;
while(y<=m&&a[i][y]!='#')x=x+a[i][y++];//往右取,直到出现#或出界结束
if(x.size()>=2)ans=min(ans,x);//长度至少为2
}
if(a[i][j]>='a'&&a[i][j]<='z'&&a[i-1][j]=='#'){//是从上到下的字母串的开头
x="";y=i;
while(y<=n&&a[y][j]!='#')x=x+a[y++][j];//往下取
if(x.size()>=2)ans=min(ans,x);
}
}
cout<<ans;
return 0;
}