大水题,可惜在比赛时脑子短路了,因为本题的数据量很小,可以直接进行暴力枚举,把*分别替换成26个字母存入,后直接查看哪个单词的数量最多并输出即可。
另外一点就是,本题可以直接使用map容器进行存储(map<string,int>),一开始还没想到,搞了半天字典树,刚搞明白那么一大串代码的时候同学过来跟我说直接用map存储我才恍然大悟。
直接上代码:
#include<bits/stdc++.h>
#include<map>
#include<string>
using namespace std;
int main()
{
int n,c;
cin>>n>>c;
map<string,int> m; //使用map储存每个字符串输入多少次
int maxx=-1;
for(int i=0;i<n;i++){
string s;cin>>s;
int j;
for(j=0;j<s.size();j++) if(s[j]=='*') break; //找出*的位置
for(int k=0;k<26;k++){ //替换26个字母存入map中
s[j]=(char)('a'+k);
if(m.count(s) ) m[s]++;
else m.insert(make_pair(s,1));
}
}
string ch;
for(auto i:m){ //找出最大值
if(i.second>maxx){
maxx=i.second;
ch=i.first;
}
}
cout<<ch<<' '<<maxx;
return 0;
}