ForHosting KIT · Texto e IA

Calculadora LCS

Encontre a sequência de caracteres mais longa que dois textos compartilham na mesma ordem, mesmo com lacunas: ABCBDAB e BDCABA compartilham 4, por exemplo BCBA. Você recebe o comprimento e uma subsequência válida que dá para conferir a olho. Grátis no seu navegador.

  • Grátis
  • Funciona no seu navegador
  • Sem cadastro
  • Seus dados não saem do seu aparelho
Use pelo WebAPIE-mailTelegramApp em breve
Se você digitar
String A
ABCBDAB
String B
BDCABA
Você obtém
Len a
7
Len b
6
Comprimento
4
Subsequência
BCBA

O problema da subsequência comum mais longa pede a sequência de caracteres mais longa que aparece na mesma ordem em duas strings de entrada, sem exigir contiguuidade. É a base de programação dinâmica das ferramentas de diff por linhas, ajudas de merge em controle de versão, detectores de plágio que toleram reordenações ruidosas e a comparação de sequências biológicas quando inserções e exclusões importam mais do que um substring exato. Esta calculadora de subsequência comum mais longa aceita duas strings, preenche uma tabela clássica de comprimentos em tempo linear em relação ao produto dos comprimentos, reconstrói um LCS válido por backtracking e devolve tanto o comprimento numérico quanto a string da subsequência. Entradas vazias são válidas e produzem comprimento zero.

O que é (e o que não é) uma subsequência comum mais longa

Uma subsequência de uma string é qualquer string obtida ao apagar zero ou mais caracteres sem reordenar os que restam. Uma subsequência comum de duas strings é uma string que é subsequência de ambas. Uma subsequência comum mais longa, ou LCS, é qualquer subsequência comum cujo comprimento é máximo entre todas as subsequências comuns.

Diferente de um substring comum mais longo, um LCS não precisa ocupar um bloco contíguo em nenhuma das entradas: o par clássico ABCBDAB e BDCABA admite várias strings LCS de comprimento quatro, como BCBA e BDAB, conforme os empates que a reconstrução escolhe. Algoritmos de diff e ferramentas de alinhamento de DNA se apoiam nessa noção não contígua porque edições reais inserem e removem símbolos em vez de apenas deslizar uma janela fixa.

O comprimento de um LCS é uma pontuação de similaridade útil; os caracteres reconstruídos servem quando você quer um esqueleto de alinhamento explícito ao lado da pontuação. Não devolve todos os LCS possíveis, scripts de edição nem percentuais de similaridade—esses são problemas separados construídos sobre a mesma ideia de tabela DP.

Onde a subsequência comum ajuda de verdade

Cursos de ciência da computação e juízes online precisam de um oráculo de referência que devolva um comprimento correto e uma subsequência válida para strings curtas arbitrárias sem que alunos colem soluções em um IDE completo. Recursos de produto próximos ao diff—resumos de mudança, dicas de conflito de merge, alinhamento de linhas de log—muitas vezes querem o comprimento LCS como sinal barato de similaridade antes de um passe mais pesado de distância de edição.

Demos didáticas de bioinformática usam strings do alfabeto DNA de brinquedo (A, C, G, T) para mostrar como inserções e exclusões ainda deixam um esqueleto compartilhado longo. Mantenha as strings abaixo do limite de comprimento, fixe a subsequência reconstruída nos testes se importar qual de várias respostas igualmente longas você obtém, e terá resultados LCS reproduzíveis sem montar uma biblioteca numérica própria.

Lições de algoritmos e demos de aula

Dê aos alunos duas strings curtas e verifique tanto o comprimento LCS quanto se a subsequência devolvida realmente aparece em ordem em cada entrada.

Correção automática em LMS e competições

Corrija tarefas de DP com um oráculo determinístico que rejeita entrada inválida e nunca inventa uma subsequência mais longa do que a tabela clássica permite.

Pré-checagens de diff e similaridade de sequências

Pontue a estrutura ordenada compartilhada entre dois textos ou strings DNA de brinquedo antes de um pipeline mais pesado de distância de edição ou alinhamento.

LCS é o mesmo que o substring comum mais longo?

Não. Um substring deve ser contíguo; uma subsequência pode pular caracteres. Esta calculadora resolve o problema de subsequência com programação dinâmica clássica.

Quais são os limites de comprimento e as regras de string vazia?

Cada string pode ter no máximo 500 caracteres. Strings vazias são permitidas e produzem length 0 com subsequência vazia.

Por que dois textos podem ter várias subsequências comuns mais longas?

Porque empates são comuns. ABCBDAB e BDCABA compartilham várias de comprimento 4, como BCBA e BDAB. A calculadora devolve uma delas e desempata sempre do mesmo jeito, então o mesmo par sempre dá a mesma resposta.

Para que serve o comprimento da LCS?

Ele funciona como uma medida de semelhança barata. Resumos de mudanças, dicas de mesclagem e alinhamento de logs podem usá-lo antes de um cálculo de distância mais pesado, e demonstrações com letras de DNA mostram como um trecho comum longo sobrevive.

Como confiro se a subsequência devolvida está certa?

Verifique se os caracteres aparecem na mesma ordem nos dois textos, pulando os demais, e se o comprimento bate com o informado. BCBA passa em ABCBDAB e em BDCABA, e é assim que as respostas são corrigidas.

Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.

POSThttps://api.kit.forhosting.com/dev/longest-common-subsequence

Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.

curl -X POST https://api.kit.forhosting.com/dev/longest-common-subsequence \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"string_a":"ABCBDAB","string_b":"BDCABA"}'
{
  "string_a": "ABCBDAB",
  "string_b": "BDCABA"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "dev.longest_common_subsequence",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.

por chamadaUS$ 0,002

Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.

HTTPCódigoO que significa
401unauthorizedToken ausente ou inválido. Confira o header Authorization.
402insufficient_balanceSaldo insuficiente para esta tarefa. Faça uma recarga e tente de novo.
404unknown_typeEsse tipo de tarefa não existe. Confira o campo type no catálogo.
429rate_limitedMuitas requisições em pouco tempo. Espere um instante e tente de novo.

Contrato de entrada, algoritmo, forma da resposta e limites

A complexidade é O(m·n) em tempo e O(m·n) em memória na forma ingênua de tabela usada aqui—adequada ao limite de comprimento, deliberadamente simples para ensino e goldens determinísticos. Envie por POST um corpo JSON com dois campos de string obrigatórios: string_a e string_b (os aliases a, s1, first, text_a e b, s2, second, text_b são aceitos). Ambos podem estar vazios; ambos devem ser strings JSON verdadeiras, não números nem arrays. Campos ausentes, tipos que não são string e entradas longas demais falham com invalid_input e não são cobrados. Em caso de sucesso o corpo ecoa string_a e string_b, informa len_a e len_b e inclui length (o comprimento LCS) mais subsequence (uma string LCS, possivelmente vazia). Internamente o solver aloca uma tabela de inteiros (m+1) por (n+1), define dp[i][j] como dp[i-1][j-1]+1 quando os prefixos coincidem no último caractere, senão o máximo das células de cima e da esquerda, e então caminha do canto inferior direito: um par coincidente acrescenta esse caractere e avança na diagonal; em empate prefere subir (descartar de string_a) para que a instância reconstruída seja estável entre runtimes.

Onde uma API de LCS realmente vale a pena

Corretoras automáticas de LMS podem chamar a API com pares fixos e afirmar tanto o comprimento quanto que a subsequência devolvida é subsequência de cada entrada, capturando bugs de tabela de um que só falham em casos vazios ou de um único caractere. Como a implementação é parse pura de nível A, cada chamada bem-sucedida custa o preço base publicado US$ 0,002 sem tokens de modelo e sem rede de saída.

Como calculo a subsequência comum mais longa de duas strings?

Envie string_a e string_b como strings JSON. A API devolve length (comprimento LCS) e subsequence (uma subsequência comum maximal), além das entradas ecoadas e seus comprimentos.

Qual LCS é devolvido quando existem vários?

Qualquer LCS de comprimento maximal é correto. Esta implementação usa um backtrack fixo (preferir descartar de string_a em empates) para que as mesmas entradas sempre produzam a mesma string de subsequência.

Quanto custa a calculadora de subsequência comum mais longa?

A ferramenta do navegador é grátis. Solicitações API usam saldo pré-pago KIT a US$ 0,002 por chamada bem-sucedida; entrada inválida não é cobrada.

Ver a documentação completa do KIT →