Найти нечетный размер палиндромной строки в данной строке - PullRequest
0 голосов
/ 21 сентября 2019

Теневая строка - палиндромная строка нечетной длины.Задана строка S и ищется такая пара теневых строк, которые не перекрываются и существуют в строке s.Также хочет найти такую ​​пару теневых строк, произведение длин которых дает максимально возможное значение.

intput: строка S, теневая строка

output: максимальное значение произведения теневых строк.2 <= | S |<= 100000 </p>

ввод: aaa

вывод: 1

ввод: ababb

вывод: 3

int main(){
    sync
    string s; cin>>s;
    int n = s.size();
map<string, int> m;
vector<int> R(n+1,0);
s = "@" + s + "#";
int rp = 0, i = 1;
while (i <= n){
    while (s[i - rp - 1] == s[i + 1 + rp])
        rp++;
        R[i] = rp;
        int k = 1;
        while ((R[i - k] != rp - k) && (k < rp)){
            R[i + k] = min(R[i - k],rp - k);
            k++;
        }
        rp = max(rp - k, 0);
        i += k;
    }
    s = s.substr(1, n);
    int p = 1;
    FOR0(i, n){
        for(int j = n-1; j > i; j--){
            if(R[i+1] + i < j){
                if(j-R[j+1]>R[i+1]+i)
                    p = max(p,(2*R[i+1]+1)*(2*R[j+1]+1));
                else
                    p = max(p,(2*R[i+1]+1)*(2*(j-R[i+1]-i-1)+1));
            }
            else
                p = max(p,(2*(j-i-1)+1));
    }
}
cout<<p<<"\n";
return 0;

}

Не совсем правильное решение.Пожалуйста, помогите мне разобраться в проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...