█████████ ████ ███░░░░░███ ░░███ ███ ░░░ ██████ ███████ ██████ ██████ ░███ ███░░███ ███░░███ ███░░███ ███░░███ ░███ ░███ ░███░███ ░███ ░███████ ░███ ░███ ░░███ ███░███ ░███░███ ░███ ░███░░░ ░███ ░███ ░░█████████ ░░██████ ░░████████░░██████ ░░██████ ░░░░░░░░░ ░░░░░░ ░░░░░░░░ ░░░░░░ ░░░░░░

Envío 2333

Problema 0x43 - Encontrar el borde más largo de una string

  • Autor: andreslel
  • Fecha: 2020-12-14 00:19:48 UTC (Hace alrededor de 4 años)
Caso # Resultado Tiempo Memoria
#1
Correcto
0.006 s 14 KBi
#2
Correcto
0.006 s 35 KBi
#3
Correcto
0.005 s 22 KBi
#4
Correcto
0.006 s 26 KBi
#5
Correcto
0.005 s 2 KBi
#6
Correcto
0.006 s 2 KBi
#7
Correcto
0.012 s 2 KBi
#8
Correcto
0.011 s 8 KBi
#9
Correcto
0.013 s 2 KBi
#10
Correcto
0.011 s 2 KBi
#11
Correcto
0.01 s 2 KBi
#12
Correcto
0.01 s 2 KBi
#13
Correcto
0.013 s 8 KBi
#14
Correcto
0.011 s 2 KBi
#15
Correcto
0.013 s 13 KBi
#16
Correcto
0.012 s 2 KBi
#17
Correcto
0.012 s 15 KBi
#18
Correcto
0.01 s 2 KBi
#19
Correcto
0.013 s 2 KBi
#20
Correcto
0.012 s 2 KBi
#21
Correcto
0.012 s 2 KBi
#22
Correcto
0.011 s 2 KBi
Puntos totales: 100 / 100

Código

#include<iostream>
#include<string>
#include<vector>

using namespace std;

vector<int> ans(string &re){
    vector<int> kmp(re.size(),0);
    int border = 0;
    for(int i = 1; i < re.size();++i){
        while(border && re[i] != re[border])
            border = kmp[border-1];
        if(re[i] == re[border])
            ++border;
        kmp[i] = border;
    }
    return kmp;
}

int main(){
    string re;
    cin >> re;
    vector<int> kmp = ans(re);
    printf("%d\n",kmp.back());
    return 0;
}