原题链接:查询字符串
原题给出N个字符串,之后给出M个查询,查询时给出一个字符串,要求找出在之前的N个字符串中,有几个字符串包含现在输入的字符串,输出该值,如果至少有一个,那么输出任意一个字符串。
解题思路:
使用一个unordered_map来记录子串和母串的关系,使用一个unordered_map记录具备该子串的母串的数量。在处理输入的字符串时,由于要分析该字符串的所有子串,我们用一个set来储存所有的子串。
#include<iostream>
#include<algorithm>
#include<string>
#include<unordered_map>
#include<unordered_set>
using namespace std;
unordered_map<string, int>cnt;
unordered_map<string, string>ID;
int main(void)
{
int n;
cin >> n;
while (n--)
{
string str;
cin >> str;
unordered_set<string>S;
for (int i = 0; i < str.size(); i++)
{
string s;
for (int j = i; j < str.size(); j++)
{
s += str[j];
S.insert(s);
}
}
for (const auto& s : S)
{
cnt[s]++;
ID[s] = str;
}
}
int m;
cin >> m;
while (m--)
{
string str;
cin >> str;
cout << cnt[str] << " ";
if (ID.count(str))
{
cout << ID[str] << endl;
}
else
{
cout << '-' << endl;
}
}
return 0;
}