A1040 Longest Symmetric String (25 分)

Given a string, you are supposed to output the length of the longest symmetric sub-string. For example, given Is PAT&TAP symmetric?, the longest symmetric sub-string is s PAT&TAP s, hence you must output 11.

Input Specification:

Each input file contains one test case which gives a non-empty string of length no more than 1000.

Output Specification:

For each test case, simply print the maximum length in a line.

Sample Input:

Is PAT&TAP symmetric?

Sample Output:

11

题意:

 求一个字符串的最长回文子串,输出其长度

思路:

DP:典型最长回文子串问题

#include <string>
#include <iostream>
#include <cstring>
using namespace std;
const int maxn = 1010;
string str;
int dp[maxn][maxn];
int main(){
    getline(cin, str);
    int len = str.length();
    int ans = 1;
    memset(dp, 0, sizeof(dp));
    //边界
    for(int i = 0; i < len; i++){
        dp[i][i] = 1;
        if(i < len - 1){
            if(str[i] == str[i + 1]){
                dp[i][i + 1] = 1;
                ans = 2;
            }
        }
    }
    //状态转移方程
    for(int L = 3; L <= len; L++){      //枚举子串的长度
        for(int i = 0; i + L - 1 < len; i++){   //枚举子串的起始
            int j = i + L - 1;          //子串的右端点
            if(str[i] == str[j] && dp[i + 1][j - 1] == 1){
                dp[i][j] = 1;
                ans = L;
            }
        }
    }
    cout << ans << endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_35093872/article/details/88039926