题意:
给定n组测试数据,每组测试数据有m个字符串,找出这些字符串中最长的公共字符串,如果有多组长度一样,输出字典序最小的。如果公共字符串的长度小于3,输出no significant commonalities
题解:
对于每一组测试数据,二重循环暴力搜索第一个字符串的所有子串。匹配剩下的字符串,如果是共有的,且新字符串比原字符串长或者长度一样且字典序更小时,则更新答案字符串。
AC代码:
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int nextarray[65];
string str[15];
void getnext(string &str)
{
memset(nextarray, 0, sizeof(nextarray));
int j = -1, k = 0;
nextarray[0] = -1;
while (k < str.size())
{
if (j == -1 || str[j] == str[k])
nextarray[++k] = ++j;
else
j = nextarray[j];
}
}
bool kmp(string &a, string &b)
{
int i = 0, j = 0, ans = 0;
while (i < a.size())
{
if (j == -1 || a[i] == b[j])
++i, ++j;
else
j = nextarr