From ccf4760c6e4693d52b34093780b22c64c0e2e768 Mon Sep 17 00:00:00 2001 From: Hermann Schwarz Date: Sun, 11 Jul 2021 15:06:38 +0200 Subject: [PATCH] Eine eventuell besser zu verstehende Variante --- .../java/kapitel04/GemeinsamerSubstring.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/SchroedingerProgrammiertJava/src/de/galileocomputing/schroedinger/java/kapitel04/GemeinsamerSubstring.java b/SchroedingerProgrammiertJava/src/de/galileocomputing/schroedinger/java/kapitel04/GemeinsamerSubstring.java index 0912f75..4b28aff 100644 --- a/SchroedingerProgrammiertJava/src/de/galileocomputing/schroedinger/java/kapitel04/GemeinsamerSubstring.java +++ b/SchroedingerProgrammiertJava/src/de/galileocomputing/schroedinger/java/kapitel04/GemeinsamerSubstring.java @@ -10,6 +10,9 @@ public static void main(String[] args) { String s1 = "Tischlerei"; String s2 = "Fische"; String gemeinsamerSubstring = ""; + + // Hier wird i für die Intervalle (Ausschnittgröße) verwendet + // j und j+i+1 (j+i) sind dann die Koordinaten des Ausschnitts for (int i = 0; i < s1.length(); i++) { for(int j = 0; j < s1.length() - i; j++) { String teilString = s1.substring(j, j+i); @@ -20,5 +23,26 @@ public static void main(String[] args) { } } System.out.println(gemeinsamerSubstring); + + // Eine Variante des Programms, die eventuell besser für die Anfänger + // zu verstehen ist, wenn wir i für den Anfang des Ausschnitts und j für das Ende des + // Ausschnittes verwenden + // der Nachteil: die Ausschnitte sind mal größer mal kleiner, s.d. wir den bisher größten gemeinsamen Substring + // zwischenspeichern müssen + gemeinsamerSubstring = ""; + for (int i = 0; i < s1.length(); i++) { + for (int j = i; j < s1.length(); j++) { + String teilString = s1.substring(i, j+1); + if (s2.contains(teilString)) { + // wenn der aktuelle Substring länger als die bisherigen ist + if(teilString.length() > gemeinsamerSubstring.length()) { + gemeinsamerSubstring = teilString; + } + } + } + } + System.out.println(gemeinsamerSubstring); } } + +