最多连接字符串的长度

大致题意:输入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;	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值