Se você criar uma matriz 26X26 para representar um gráfico direcionado de vértice como cada alfabeto e palavras como aresta. Por exemplo, palavra - APPLE conecte o vértice A e E com a borda direcionada de A para E. Agora o problema se reduz à localização da maior trilha euleriana (caminho que inclui o número máximo de arestas, visitando cada aresta uma vez com a possível repetição de vértices) no gráfico. Um dos algoritmos O (E) seria iniciar aleatoriamente a partir de um par de vértices. Encontre um caminho entre eles. Do que continuar relaxando o caminho até que seja possível.
update
@ GlenH7 Resolvi uma pergunta semelhante em www.hackerearth / jda recentemente, houve notas relativas à melhor solução e pontuei as notas mais altas com as seguintes
Dada lista de palavras. Encontre a cadeia mais longa que pode ser formada por eles. Uma cadeia é válida se cada palavra começar com uma letra * que termina no final da última palavra.
Approch =
1) faça o gráfico de alfabetos como vértices e palavras como arestas. No lugar de usar várias arestas, use uma com peso igual ao número de arestas.
2) encontre o componente fortemente conectado do gráfico com arestas máximas. Descarte temporariamente outras arestas.
3) Para cada vértice, faça seu indegree igual ao seu outdegree.
4) Agora existe um circuito euleriano no gráfico. Encontre.
5) Agora, no gráfico restante (o gráfico original wrt encontra a trilha mais longa com o primeiro vértice no componente fortemente conectado escolhido. Eu acho que isso é NP difícil.
6) Inclua a trilha acima no circuito eleriano, convertendo o circuito euleriano em trilha.
Por que - eu aceito que essa pergunta provavelmente é NP difícil (acho, não matematicamente falando). Mas a abordagem acima funciona melhor quando existe uma lista longa (mais de 1000) de palavras distribuídas uniformemente (ou seja, não se destina a ser wc para a abordagem acima). Vamos supor que, depois de converter a lista fornecida no gráfico mencionado acima, felizmente se torne um gráfico euleriano (consulte http://en.wikipedia.org/wiki/Eulerian_path para obter condições), sem dúvida, podemos dizer essa resposta a pergunta acima é P e, na verdade, é o caminho euleriano no gráfico (consulte http://www.graph-magics.com/articles/euler.php para obter uma abordagem muito simples de fazê-lo e verifique isso para verificar se o seu gráfico tem único http://www.geeksforgeeks.org/strongly-connected-components/e se não estiver temporariamente limpo outro scc pequeno, pois existe um caminho euleriano para scc único). Assim, para casos sem sorte (que são quase todos os casos), tento convertê-los em casos com sorte (ou seja, a condição de trilha euleriana é cumprida). Como fazer isso? Tentei fazer uma pesquisa de profundidade crescente por arestas irrelevantes (o conjunto de arestas em um caminho que começa no vértice com grau de grau maior que indegree e termina no vértice com grau de grau indiferente). Aumentar a pesquisa em profundidade significa que primeiro eu procurei por todo esse conjunto de uma aresta no caminho do que duas arestas no caminho e assim por diante. Pode parecer, à primeira vista, que a pesquisa com profundidade levaria O (nós ^ i), portanto, a complexidade total do tempo de O (nós + nós ^ 2 + nós ^ 3 + ....) até que seja um caso de sorte. Mas a análise amortizada revelará que é O (arestas). Uma vez que é reduzido caso sorte encontrar circuito euleriano.
Até aqui era tempo polinomial. Isso daria quase a melhor solução. Mas, para aumentar ainda mais sua solução (a solução perfeita é difícil para o NP), tente uma abordagem gananciosa no gráfico restante para encontrar uma longa trilha olhando com um dos vértices no scc escolhido. Agora adicione isso à trilha euleriana acima encontrada para aumentá-la ainda mais.