当前位置:编程学习 > C/C++ >>

UVa 11151 - Longest Palindrome

题目:求最常回文子串。

分析:dp、LCS,求一个串的最常回文子串就是本串与翻转串之间的最大公共子序列。

注意:数据中有空串。

[cpp] 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
 
char string[ 1005 ]; 
char revstr[ 1005 ]; 
int  f[ 1005 ][ 1005 ]; 
 
int main() 

    int T;  
    while ( scanf("%d",&T) != EOF ) { 
        getchar(); 
        for ( int t = 1 ; t <= T ; ++ t ) { 
            gets(string); 
            int len = strlen(string); 
            for ( int i = 0 ; i < len ; ++ i )   
                revstr[len-i-1] = string[i]; 
             
            memset( f, 0, sizeof(f) ); 
            for ( int i = 1 ; i <= len ; ++ i ) 
            for ( int j = 1 ; j <= len ; ++ j ) 
                if ( string[i-1] == revstr[j-1] ) 
                    f[i][j] = f[i-1][j-1]+1; 
                else { 
                    f[i][j] = f[i-1][j]; 
                    if ( f[i][j] < f[i][j-1] ) 
                        f[i][j] = f[i][j-1]; 
                } 
            printf("%d\n",f[len][len]); 
        } 
    } 
    return 0; 

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,