这到题是一个题目题,有很多歧义不清的地方:
1、字符串的重叠部分只去最小的重叠。
2、字符串与自己不算包含关系例:abab可以自己做自己的龙头。
附AC代码:
#include
#include
using namespace std;
int n;
string a[23];
int flag[23]={0};
int ans=0;
int len=0;
string start;
int com(string a, string b){
string forward;
string backward;
int len=0;
for(int i=0, j=a.length()-1; i<=b.length() && j>0; i++, j--){
string::iterator it;
it = forward.begin();
forward.insert(it, a[j]);
backward += b[i];
if(forward.compare(backward)==0){
len = forward.length();
return len;
}
}
return len;
}
void dfs(int num, string head){
if(num==1){
for(int i=0; i<n; i++){
if(a[i].find(head)==0){
flag[i]++;
len += a[i].length();
dfs(num+1, a[i]);
len -= a[i].length();
flag[i]--;
}
}
}
else{
for(int i=0; i<n; i++){
int temp = com(head, a[i]);
if(flag[i]<2 && temp!=0){
flag[i]++;
len = len + a[i].length()-temp;
dfs(num+1, a[i]);
len = len - a[i].length()+temp;
flag[i]--;
}
}
}
ans = max(ans, len);
return;
}
int main(){
scanf("%d", &n);
for(int i=0; i<n; i++){
cin>>a[i];
}
cin>>start;
dfs(1, start);
printf("%d", ans);
}