程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> UVa 11151 - Longest Palindrome

UVa 11151 - Longest Palindrome

編輯:C++入門知識

題目:求最常回文子串。

分析: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; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved