这题目,如果单单接收数据,然后一个个比较的话,肯定是会超时的。
所以要用字典树或者map容器,由于还没有学会字典树,所以采用map容器。
那该怎么使用呢?
将每个单词的所有前缀都作为键,前缀的个数作为值,存入map容器
map[s1]+=1;如果容器中无前缀则为1,如果有,则在基础上+1
然后,就可以直接用第二部分的字符串数据当作下标来访问容器,返回值就是以该字符串为前缀的单词的个数。
下面是代码:
#include<iostream>
#include<string>
#include<map>
#include<vector>
using namespace std;
int main()
{
string line;
string s1;
map<string,int>map_;
char ch;
getline(cin,line);
while(line != "")
{
for(int i=0;i!=line.size();++i)//将每个单词的所有前缀加入map容器中
{
ch = line[i];
s1+=ch;
map_[s1]+=1;
}
s1.clear();//将s1清空
getline(cin,line);
}
while(getline(cin,line) )
{
cout<<map_[line]<<endl;//返回值就是以该字符串为前缀的单词的数量
}
}
下面是我用字典树实现该题的代码: