#include<iostream>
#include<cstring>
using namespace std;
int n,ans = 0,sum = 0;
string str[25];
char c;
int vis[25],repeat[25][25];
int link(int x,int y) // 判断两个字符串是否可以相连
{
for (int k = str[x].size() - 1;k>=0;k--)
{
bool match = 1;
for (int i = k,j = 0;i<=min(str[x].size() - 1,str[y].size() - 1);i++,j++)
{
if (str[x][i] != str[y][j])
{
match = 0;
break;
}
}
if (match && k != 0 && str[x].size() - k != str[y].size()) // 如果可以连且不包含
{
return str[x].size() - k;
}
}
return 0;
}
void search(int index)
{
bool ending = 1;
for (int i = 1;i<=n;i++)
{
if (link(index,i) && vis[i] < 2) //能相连而且使用没有超过两次
{
ending = 0;
vis[i] ++;
repeat[index][i] = link(index,i);
ans += str[i].size() - repeat[index][i];
search(i);
ans -= str[i].size() - repeat[index][i];// 回溯
vis[i] --;
}
}
if (ending == 1)
{
sum = max(sum,ans);
return;
}
}
int main(){
cin>>n;
for (int i = 1;i<=n;i++)
{
cin>>str[i];
}
cin>>c;
for (int i = 1;i<=n;i++)
{
if (str[i][0] == c)
{
vis[i] ++;
ans = str[i].size();
search(i);
vis[i] = 0;
}
}
cout<<sum<<endl;
return 0;
}
样例输出33,求助大佬