Suponha que recebamos uma coleção de strings, S 1 , ... , S n . Gostaria de saber se alguma dessas strings é uma substring de qualquer outra string da coleção. Em outras palavras, eu gostaria de um algoritmo para a seguinte tarefa:
Entrada:
Saída: tal que S i é uma subsequência de S j e i ≠ j , ou nenhum, se não, tais i , j existem
Existe um algoritmo eficiente para isso?
Se substituirmos "substring" por "prefix", existe um algoritmo eficiente (classifique as strings, faça uma varredura linear para comparar as strings adjacentes; a classificação garantirá que as substrings sejam adjacentes). Mas parece mais desafiador testar se uma string é uma substring de outra string. Um algoritmo ingênuo é iterar sobre todos os pares , mas isso requer Θ ( n 2 ) testes de substring. Existe um algoritmo mais eficiente?
Acho que poderíamos chamar isso de "teste de substring de todos os pares", ou algo assim.
Meu objetivo final é remover a coleção para que nenhuma string seja uma substring de qualquer outra, removendo cada uma que é uma substring de outra coisa na coleção.