Description
m个字符串,求最长连续子串
Algorithm
每个串,求每个子串
用set 和 map 存起
set是用了判重的,防止每个串里有重复的
map是全局的
然后就A了
STL大法好
Code
#include <cstdio>
#include <string>
#include <iostream>
#include <map>
#include <set>
using namespace std;
void solve()
{
map<string, int> mymap;
int m;
scanf("%d\n", &m);
for (int i = 0; i < m; i++)
{
set<string> myset;
string s;
getline(cin, s);
for (int j = 0; j < s.size() - 3; j++)
{
for (int k = 3; k < s.size() - j; k++)
{
string str = s.substr(j, k);
if (myset.find(str) == myset.end())
{
mymap[str]++;
myset.insert(str);
}
}
}
}
string ans;
for (map<string, int>::iterator it = mymap.begin(); it != mymap.end(); it++)
{
if (it->second == m)
{
if ((it->first).size() > ans.size())
{
ans = it->first;
continue;
}
if ((it->first).size() == ans.size() && (it->first < ans))
{
ans = it->first;
}
}
}
if (ans == "") ans = "No significant commonalities";
cout << ans << endl;
}
int main()
{
// freopen("input.txt", "r", stdin);
int n;
scanf("%d\n", &n);
for (int i = 0; i < n; i++)
solve();
}