Voltar

Algoritmo de Manacher - Strings

0 Curtidas
vector manacher(const string& s) {
    string s2 = "#";
    for(unsigned int i = 0; i < s.size(); i++)
        s2 += s[i], s2 += '#';

    int c = 1, sz = (int)s2.size(), j;
    vector ans(sz);
    while(c < sz) {
        while(c > ans[c] && c+ans[c]+1 < sz && s2[c-ans[c]-1] == s2[c+ans[c]+1])
            ans[c]++;

        j = 1;
        while(c+j < sz && j < ans[c]-ans[c-j])
            ans[c+j] = ans[c-j], j++;
        if(c+j < sz)
            ans[c+j] = ans[c]-j;
        c += j;
    }

    return ans;
}
Problemas relacionados
  Nome Comentário
Ainda não há nenhum problema relacionado a esse conteúdo
Sugestão de livro

Comentários


Postagens neste fórum só são permitidas para membros com conta ativa. Por favor, efetue login or cadastro para postar.