大致题意:输入n个字符串,想要连接两个字符串需要第一个的end等于第二个的begin,并且最后需要保证得到的最大字符串的首和尾相同
可以尝试利用dp的思想记录首尾信息
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
freopen("in.txt","r",stdin);
int n;
cin>>n;
int dp[30][30]={0};//记录首尾信息---以i开头j结尾的字符串的最大长度
for(int i=0;i<n;i++)
{
string temp;
cin>>temp;
int Size=temp.size();
int begin=temp[0]-'a';
int end=temp[Size-1]-'a';
dp[begin][end]=max(dp[begin][end],Size);
for(int i=0;i<26;i++)//检查并尝试更新 26字母开头 当前串end结尾 的字符串长度
{
if(dp[i][begin])//只有存在可以接龙的字符串的时候才需要更新
{
dp[i][end]=max(dp[i][end],dp[i][begin]+Size);
}
}
}
int ans=0;
for(int i=0;i<26;i++)
{
ans=max(ans,dp[i][i]);
}
cout<<ans<<endl;
}