PAT甲級- 1040 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解決迴文串問題。

使用子串長度L作爲遞增量,左邊界i ,右邊界i + L - 1,保證dp枚舉順序是合理的。

讀入一行字符串 getline(cin, string)

#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
using namespace std;
const int maxn = 1010;
string S;
char dp[maxn][maxn];

int main(){
    //dp[i][j]表示i到j之間的元素是否是迴文子串
    getline(cin, S);
    int len = S.length();
    memset(dp, 0, sizeof(dp));
    int max = 1;
    for(int i = 0; i < len; i++){
        dp[i][i] = 1;
        if(i < len - 1 && S[i]==S[i + 1]){
            dp[i][i+1] = 1;
            max = 2; // important
        }
    }

    for(int L = 3; L <= len; L++){
        for(int i = 0; i + L - 1 < len; i++){
            int j = L - 1 + i;
            if(S[i] == S[j] && dp[i+1][j-1] == 1)
            {
                dp[i][j] = 1;
                max = L;
            }

        }
    }

    cout<<max;
    return 0;
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章