牛客-小A的回文串(最长回文串,马拉车算法)

题目:题目链接
小A只想知道给定的一个字符串的最大回文子串是多少,。现在小A可以对这个字符串做一些改动,他可以把这个字符串最前面的某一段连续的字符(不改变顺序)移动到原先字符串的末尾。那么请问小A通过这样的操作之后(也可以选择不移动)能够得到最大回文子串的长度是多少。
思路:
1 枚举所有字串 使用马拉车算法
2 枚举起点和终点 利用动态规划的思想

思路一:待补齐

思路二:
/*枚举起点和终点 字符串前面+" "是必须的

string ss;cin>>ss;
    int len = ss.size();
    string s = " "+ss+ss;      
    int ans = 1;          		//如果设置为-1 会报错
    for(int i=1;i<=len;i++)   			//起点
    {
        for(int j=i+1;j<=len+i-1;j++)  //终点
        {
            if(s[i]==s[j])
            {
                d[i][j]=d[i-1][j+1]+2;
                if(j-i==2) d[i][j]++;       
            }     //只有当这个距离是才是判断是否是回文串
            if(j-i==1||j-i==2) ans=max(ans,d[i][j]);
        }
    }
    cout<<ans<<endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值