データ構造——最長対称サブストリング

979 ワード

この文字列の中で一番長い対称シーケンスを探させます.
テーマリンク:https://pintia.cn/problem-sets/1052335451183816704/problems/1052335487275802632#p-1
 
思考:各対称中心を列挙して、判断する時は対称で、文字列の長さはただ1000だけなので、時間が超過することはなくて、比較的に簡単な模擬問題です.
唯一の注意はここの対称方式には二種類があります.一つはaacaで、一つはaaccaaです.
 
ACコードは以下の通りです.
#include 

using namespace std;
const int maxn=2000;
const int INF=0x3f3f3f3f;

char s[maxn];

int main()
{
    int len=0;
    char ch;
    while(scanf("%c",&ch)!=EOF)
    {
        s[len++]=ch;
    }

    int p1=1,p2=0;
    for(int i=1;i=0;j--)
        {
            if(s[j]==s[mid++]) t+=2;
            else break;
        }
        p1=max(p1,t);
    }

    for(int i=1;i=0;j--)
        {
            if(s[j]==s[mid++]) t+=2;
            else break;
        }
        p2=max(p2,t);
    }

    printf("%d",max(p2,p1));
    return 0;
}