题解 | #最长回文字符串#

合并回文子串

http://www.nowcoder.com/practice/2f43728b46744546b4ad7f4f0398054f

最长回文字符串

#include<stdio.h>

int main()
{
    char A[55],B[55];
    int n,max=0;
    scanf("%d",&n);
    for(int q=0;q<n;++q)
    {
        scanf("%s%s",A+1,B+1);
        max=0;
        int dp[52][52][52][52]={0};
        memset(dp,0,sizeof(dp));
        for(int d1=0;d1<=strlen(A+1);++d1)
        {
            for(int d2=0;d2<=strlen(B+1);++d2)
            {
                for(int i=1,j=d1;j<=strlen(A+1);++i,++j)
                {
                    for(int k=1,l=d2;l<=strlen(B+1);++k,++l)
                    {
                        if(d1+d2<=1) dp[i][j][k][l]=1;
                        else{
                            //dp[i][j][k][l]=0;
                            if(A[i]==A[j] && d1>1) dp[i][j][k][l] |= dp[i+1][j-1][k][l];
                            if(B[k]==B[l] && d2>1) dp[i][j][k][l] |= dp[i][j][k+1][l-1];
                            if(A[i]==B[l] && d1 && d2) dp[i][j][k][l] |= dp[i+1][j][k][l-1];
                            if(A[j]==B[k] && d1 && d2) dp[i][j][k][l] |= dp[i][j-1][k+1][l];
                        }
                        if(dp[i][j][k][l])
                            max = max>(d1+d2)?max:(d1+d2);
                    }
                }
            }
        }
        printf("%d\n",max);
    }
    
    
    return 0;
}
全部评论

相关推荐

09-01 11:31
门头沟学院 Java
buul:七牛云的吧,感觉想法是好的,但是大家没那么多时间弄他这个啊。。。不知道的还以为他是顶尖大厂呢还搞比赛抢hc,只能说应试者的痛苦考察方是无法理解的,他们只会想一出是一出
点赞 评论 收藏
分享
做个有文化的流氓:Offer收割机
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务