提交结果
我的代码:
#include <iostream>
#include <string>
#include <algorithm>
#define N 105
using namespace std;
int n;
string s[N];
string be;
int ans;
int use[N];
string link(string s1, string s2) {
string s3 = s1;
int len = -1;
for(int i = 1; i <= min(s1.size(), s2.size()); ++i)
if(s1.substr(s1.size() - i, i) == s2.substr(0, i))
len = i;
if(len == -1)
return "";
return s1 + s2.substr(len, s2.size() - len);
}
void dfs(string dr) {
if(dr.size() > ans)
ans = dr.size();
for(int i = 1; i <= n; ++i) {
if(use[i] == 2)
continue;
if(link(dr, s[i]) == "")
continue;
++use[i];
dfs(link(dr, s[i]));
--use[i];
}
}
int main() {
cin >> n;
for(int i = 1; i <= n; ++i)
cin >> s[i];
cin >> be;
dfs(be);
cout << ans << endl;
return 0;
}