LCS-Rechner
Finden Sie die längste Zeichenfolge, die zwei Zeichenketten in derselben Reihenfolge teilen, auch mit Lücken: ABCBDAB und BDCABA teilen 4, etwa BCBA. Sie erhalten die Länge und eine gültige Teilsequenz, die Sie mit bloßem Auge prüfen können. Kostenlos in Ihrem Browser.
- Kostenlos
- Läuft in Ihrem Browser
- Ohne Anmeldung
- Ihre Daten bleiben auf Ihrem Gerät
Im Browser ausführen – kostenlos
Rechenbeispiel
- Zeichenfolge A
- ABCBDAB
- Zeichenfolge B
- BDCABA
- Len a
- 7
- Len b
- 6
- Länge
- 4
- Teilfolge
- BCBA
Das Problem der längsten gemeinsamen Teilsequenz fragt nach der längsten Zeichenfolge, die in derselben Reihenfolge in zwei Eingabezeichenketten vorkommt, ohne Kontinuität zu verlangen. Es ist das dynamische-Programmierungs-Fundament zeilenorientierter Diff-Werkzeuge, Merge-Hilfen in Versionskontrollsystemen, Plagiatserkenner, die Rauschen durch Umordnung tolerieren, und des biologischen Sequenzvergleichs, wenn Einfügungen und Löschungen wichtiger sind als exakte Teilstrings. Dieser Rechner für die längste gemeinsame Teilsequenz nimmt zwei Zeichenketten entgegen, füllt eine klassische Längentabelle in linearer Zeit relativ zum Produkt der Längen, rekonstruiert ein gültiges LCS per Backtracking und liefert sowohl die numerische Länge als auch die Teilsequenz-Zeichenkette. Leere Eingaben sind gültig und ergeben Länge null.
Was eine längste gemeinsame Teilsequenz ist (und was nicht)
Eine Teilsequenz einer Zeichenkette ist jede Zeichenkette, die entsteht, wenn man null oder mehr Zeichen löscht, ohne die Verbliebenen umzuordnen. Eine gemeinsame Teilsequenz zweier Zeichenketten ist eine Zeichenkette, die Teilsequenz beider ist. Eine längste gemeinsame Teilsequenz, oder LCS, ist jede gemeinsame Teilsequenz, deren Länge unter allen gemeinsamen Teilsequenzen maximal ist.
Anders als ein längster gemeinsamer Teilstring muss ein LCS keinen zusammenhängenden Block in einer der Eingaben belegen: das klassische Paar ABCBDAB und BDCABA lässt mehrere LCS-Zeichenketten der Länge vier zu, etwa BCBA und BDAB, je nachdem welche Gleichstände die Rekonstruktion wählt. Diff-Algorithmen und DNA-Alignment-Werkzeuge nutzen diese nicht-kontinuierliche Vorstellung, weil echte Edits Symbole einfügen und löschen statt nur ein festes Fenster zu schieben. Die Länge eines LCS ist ein nützlicher Ähnlichkeitswert; die rekonstruierten Zeichen helfen, wenn Sie neben dem Score ein explizites Alignment-Skelett zeigen möchten.
Er liefert nicht jedes mögliche LCS, Edit-Skripte oder Ähnlichkeitsprozente—das sind getrennte Probleme auf derselben DP-Tabellenidee.
Wo die gemeinsame Teilsequenz wirklich hilft
Informatikkurse und Online-Judge-Systeme brauchen ein Referenzorakel, das für beliebige kurze Zeichenketten eine korrekte Länge und eine gültige Teilsequenz liefert, ohne dass Studierende Lösungen in eine volle IDE einfügen. Diff-nahe Produktfunktionen—Änderungszusammenfassungen, Merge-Konflikt-Hinweise, Logzeilen-Alignment—wollen oft die LCS-Länge als günstiges Ähnlichkeitssignal vor einem schwereren Edit-Distance-Durchlauf. Bioinformatik-Lehrdemos nutzen Spielzeug-DNA-Alphabetzeichenketten (A, C, G, T), um zu zeigen, wie Einfügungen und Löschungen trotzdem ein langes gemeinsames Gerüst lassen.
Halten Sie Zeichenketten unter der Längengrenze, fixieren Sie die rekonstruierte Teilsequenz in Tests, wenn es Ihnen wichtig ist, welche von mehreren gleich langen Antworten Sie erhalten, und Sie bekommen reproduzierbare LCS-Ergebnisse ohne eigene Numerikbibliothek.
Anwendungsfälle
Algorithmen-Hausaufgaben und Vorlesungsdemos
Geben Sie Studierenden zwei kurze Zeichenketten und prüfen Sie sowohl die LCS-Länge als auch, dass die zurückgegebene Teilsequenz wirklich der Reihe nach in jeder Eingabe vorkommt.
LMS- und Wettbewerbs-Autobewertung
Bewerten Sie DP-Aufgaben mit einem deterministischen Orakel, das ungültige Eingaben ablehnt und nie eine längere Teilsequenz erfindet, als die klassische Tabelle erlaubt.
Diff- und Sequenzähnlichkeits-Vorchecks
Bewerten Sie gemeinsame geordnete Struktur zwischen zwei Texten oder Spielzeug-DNA-Zeichenketten, bevor Sie eine schwerere Edit-Distance- oder Alignment-Pipeline starten.
Häufige Fragen
Ist LCS dasselbe wie der längste gemeinsame Teilstring?
Nein. Ein Teilstring muss zusammenhängend sein; eine Teilsequenz darf Zeichen überspringen. Dieser Rechner löst das Teilsequenzproblem mit klassischer dynamischer Programmierung.
Welche Längengrenzen und Regeln für leere Zeichenketten gelten?
Jede Zeichenkette darf höchstens 500 Zeichen haben. Leere Zeichenketten sind erlaubt und erzeugen length 0 mit leerer Teilsequenz.
Warum können zwei Zeichenketten mehrere längste gemeinsame Teilsequenzen haben?
Weil Gleichstände häufig sind. ABCBDAB und BDCABA teilen mehrere der Länge 4, etwa BCBA und BDAB. Der Rechner liefert eine davon und löst Gleichstände immer gleich auf, daher ergibt dasselbe Paar stets dieselbe Antwort.
Wofür ist die Länge der LCS nützlich?
Sie dient als günstiges Ähnlichkeitsmaß. Änderungszusammenfassungen, Hinweise beim Zusammenführen und das Ausrichten von Logzeilen können sie vor einer aufwendigeren Distanzberechnung nutzen, und Lehrbeispiele mit DNA-Buchstaben zeigen, wie ein langes gemeinsames Rückgrat erhalten bleibt.
Wie prüfe ich, ob die gelieferte Teilsequenz stimmt?
Prüfen Sie, ob ihre Zeichen in beiden Zeichenketten in derselben Reihenfolge vorkommen, wobei andere übersprungen werden dürfen, und ob die Länge zur angegebenen Zahl passt. BCBA besteht in ABCBDAB und in BDCABA, genau so werden Antworten bewertet.
Verwandte Tools
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
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"}'const res = await fetch("https://api.kit.forhosting.com/dev/longest-common-subsequence", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"string_a": "ABCBDAB",
"string_b": "BDCABA"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/longest-common-subsequence",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"string_a": "ABCBDAB",
"string_b": "BDCABA"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/longest-common-subsequence", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"string_a":"ABCBDAB","string_b":"BDCABA"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"string_a":"ABCBDAB","string_b":"BDCABA"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/longest-common-subsequence", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"string_a": "ABCBDAB",
"string_b": "BDCABA"
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.longest_common_subsequence",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |
Technische Hinweise
Eingabevertrag, Algorithmus, Antwortform und Grenzen
Die Komplexität ist O(m·n) Zeit und O(m·n) Speicher in der hier genutzten naiven Tabellenform—passend zur Längengrenze, bewusst einfach für Lehre und deterministische Goldens. Senden Sie per POST einen JSON-Body mit zwei Pflicht-Zeichenkettenfeldern: string_a und string_b (Aliase a, s1, first, text_a sowie b, s2, second, text_b werden akzeptiert). Beide dürfen leer sein; beide müssen echte JSON-Zeichenketten sein, keine Zahlen oder Arrays. Fehlende Felder, Nicht-Zeichenketten-Typen und zu lange Eingaben scheitern mit invalid_input und werden nicht abgerechnet. Bei Erfolg spiegelt der Body string_a und string_b, meldet len_a und len_b und enthält length (die LCS-Länge) sowie subsequence (eine LCS-Zeichenkette, möglicherweise leer). Intern allokiert der Solver eine (m+1) mal (n+1) Integer-Tabelle, setzt dp[i][j] auf dp[i-1][j-1]+1 wenn die Präfixe am letzten Zeichen übereinstimmen, sonst das Maximum der oberen und linken Zelle, und wandert dann von der unteren rechten Ecke: ein treffendes Paar hängt dieses Zeichen an und geht diagonal; bei Gleichstand wird bevorzugt nach oben gegangen (von string_a verworfen), damit die rekonstruierte Instanz über Runtimes stabil ist.
Wo eine LCS-API echten Nutzen bringt
LMS-Auto-Bewerter können die API mit festen Paaren aufrufen und sowohl die Länge als auch prüfen, dass die zurückgegebene Teilsequenz Teilsequenz jeder Eingabe ist, und so Eins-Fehler in Tabellen fangen, die nur bei leeren oder einzeichenigen Randfällen scheitern. Weil die Implementierung reines Parse der Stufe A ist, kostet jeder erfolgreiche Aufruf den veröffentlichten Basispreis $0.002 ohne Modell-Tokens und ohne ausgehendes Netz.
Technische Fragen
Wie berechne ich die längste gemeinsame Teilsequenz zweier Zeichenketten?
Senden Sie string_a und string_b als JSON-Zeichenketten. Die API liefert length (LCS-Länge) und subsequence (eine maximale gemeinsame Teilsequenz), plus die gespiegelten Eingaben und ihre Längen.
Welches LCS wird zurückgegeben, wenn mehrere existieren?
Jedes LCS maximaler Länge ist korrekt. Diese Implementierung nutzt einen festen Backtrack (bei Gleichstand bevorzugt string_a verwerfen), damit dieselben Eingaben immer dieselbe Teilsequenz-Zeichenkette ergeben.
Was kostet der Rechner für die längste gemeinsame Teilsequenz?
Das Browser-Tool ist kostenlos. API-Anfragen nutzen das vorausbezahlte KIT-Guthaben zu $0.002 pro erfolgreichem Aufruf; ungültige Eingaben werden nicht abgerechnet.