Algo gleicher Buchstabe in 2 Wörtern suchen

Status
Nicht offen für weitere Antworten.

---

Aktives Mitglied
Hallo,

ich versuche den ersten gleichen Buchstaben zweier Wörter zu finden.
Das Problem hierbei ist, dass die Suche nicht von Anfang der Strings begonnen wird, sondern von der Mitte String1 und Mitte String2 aus. Also Mitte Wort1 mit Mitte Wort2 vergleichen und dann Position +1, -1 abwechselnd in Wort1 und Wort2.

z.B. Niederbayern, Niederbronn
hier wäre der erste gleiche Buchstabe r
Code:
//Suche Überkreuzung, von Mitte aus
	  int w1Mitte= (int)Math.ceil(w1.length()/2);
	  int w2Mitte= (int)Math.ceil(w2.length()/2);
	  char m = charAt(w1Mitte);
Mein Problem ist jetzt, welche Schleifenanweisung nehme ich am Besten?
Switch/case - Für jede Position des ersten Wortes einen eigenen case und dann die Position von Wort2 +1, -1?

vielen Dank schon mal..
 

Schandro

Top Contributor
switch/case ist Unsinn, du kannst schließlich nicht wissen wieviele Buchstaben das übergebene Wort hat.

Was passiert denn bei so nem Fall:

Sonne
See

Wenn der immer nur Buchstaben mit dem selben Abstand zur Mitte vergleicht, dann würde hier nichts rauskommen, obwohl in beiden S und e vorkommen...
Wenn du mir das beantwortest, werd ich ne hilfreichere Antowort schreiben ;)

EDIT:
Hab keinen Plan wie die Code Tags im neuen Forum funktionieren, deswegen hab ichs hochgeladen:
schandro.webhop.org/A.java
 
Zuletzt bearbeitet:

---

Aktives Mitglied
Danke für die schnelle Antwort.

bei Sonne und See würde s oder e rauskommen je nach dem, wie man sucht.
Und das ist ja gerade mein Problem.
Ich möchte von der Mitte aus nach rechts + links, solange suchen, bis der erste übereinstimmende Buchstabe gefunden wird.

Würde ich beim ersten Buchstaben anfangen, würd ich einfach eine verschachtelte for- Schleife machen, die jede Position des ersten Wortes mit jeder des zweiten Wortes vergleicht. Und abbrechen, wenn ein Treffer gefunden.
Code:
for (int i = 0, i<= word1.length(), i++)
{

  for (int j = 0, j<= word2.length(), j++)
  {
    vergleiche char an Pos i wort1 mit char an Posj wort2
  }
}
Also das gleiche Prinzip nur von der Mitte aus und nicht vom Anfang der Wörter.
 

Schandro

Top Contributor
Habs ebengrade in meinen Post editiert (die URL), du müsstest nurnoch einbauen das das Beispiel mit Sonne/See geht
 

---

Aktives Mitglied
Danke, schaus mir in Ruhe an.
Mit den codetags hatte ich auch meine Not..
Es gibt keinen Button mehr, einfach selbst schreiben
Code:
 ....
 

---

Aktives Mitglied
letzter Versuch:
code-Tags:
Code:
 -Anfang
[code]- Ende vor code "/" einfügen
 

---

Aktives Mitglied
Nun ja, zumindest hab ich jetzt meinen Denkfehler erkannt.
Wenn die Wörter unterschiedlich gross sind, wird das Kleinere nicht vollständig durchsucht.
Und zudem werden einige Chancen verpasst, überhaupt einen Treffer zu finden. Denn es wird immer nur +1, -1 verglichen.

Mir fällt nichts gutes ein. Ausser dass ich nach "mittiger" Suche einfach nochmal von Anfang an Suche.

Code:
class A{
	 public static void main(String[] args) { 
		String s1 ="SONNE";
		String s2 ="SEE";
		int m1 = (int)Math.ceil(s1.length()/2);
		int m2 = (int)Math.ceil(s2.length()/2);
		int pos2=0;
		char match;

		for(int i=0;i<=m1;++i){
		if ((m2-i)<0) pos2 = 0;
		else pos2=m2-i;
		if(m2 +i >s2.length()) pos2 = s2.length();
		else pos2=m2+i;
			try{
				if(s1.charAt(m1-i) == s2.charAt(m2-i)){
					match = s1.charAt(m1-i);
				}
				if(s1.charAt(m1+i) == s2.charAt(m2+i)){
					match = s1.charAt(m1+i);
				}
			}catch(Exception e){
				break;}
		}
             //neue Suche, damit überhaupt Treffer
             for (int i = 0, i<= word1.length(), i++)
             {

                 for (int j = 0, j<= word2.length(), j++)
                 {
                    vergleiche char an Pos i wort1 mit char an Posj wort2
                 }
             }
    }
}
 

Schandro

Top Contributor
wärs das hier nicht besser, anstatt die Suche noch mal von Anfang an zu machen:
Anstatt immer nur die characters (mitte +/- i) zu vergleichen, vergleich doch ob jeweils im Kompletten Bereich (mitte-i bis mitte+i) der jeweilige character vorkommt, dadurch ist die Suche immernoch "mittellastig"
 

Landei

Top Contributor
Das hier findet den längsten gemeinsamen Abschnitt:

Code:
  public static List<String> longestMatch(String w1, String w2) {
    List<String> longest = new ArrayList<String>();
    StringBuilder sb = new StringBuilder();
    longest.add("");
    for (int i1 = 0; i1 < w1.length(); i1++) {
      for (int i2 = 0; i2 < w2.length(); i2++) {
        sb.setLength(0);
        int j1 = i1;
        int j2 = i2;
        while(j1 < w1.length() && j2 < w2.length() && w1.charAt(j1) == w2.charAt(j2)) {
           sb.append(w1.charAt(j1));
           j1++;
           j2++;
        }
        if (sb.length() > longest.get(0).length()) {
          longest.clear();
          longest.add(sb.toString());
        } else if (sb.length() == longest.get(0).length()) {
          longest.add(sb.toString());
        }
      }
    }
    return longest;
  }
  
  public static void main(String... args) {
     System.out.println(longestMatch("silbersee","berserker"));  //[berse]
     System.out.println(longestMatch("banane","libanese")); //[ban, ane]
  }
 
Zuletzt bearbeitet:

---

Aktives Mitglied
Hallo,

hier ein neuer Versuch, leider habe ich Probleme mit den Suchbereichen.
Wie Vorschlag von Schandro:
jeweils im Kompletten Bereich (mitte-i bis mitte+i) der jeweilige character suchen.
Es soll der Suchbereich nicht mehr erweitert werden,wenn schon über die ganze Stringlänge gesucht wird. In meinem Fall scheint der Abbruch nicht zu funktionieren. -> String index out of range: -1

Sieht jemand, was falsch ist?
Code:
class A
{
 public static int[] firstMatch(String s1, String s2)
 {
	 int[] posMatch = new int[2];
	 int m1 = (int)Math.ceil(s1.length()/2);
	 int m2 = (int)Math.ceil(s2.length()/2);
	 int pos2=0;
 
	  for(int i=0;i<=m1;++i)//s1 immer der längste
	  {  
	   for (int i1 = m1-i; i1 <= m1+i; i1++) 
	   {     
	    for (int j1 = m2-i; j1 <= m2+i; j1++) 
	    {
	     //solange Bereich s2 erhöhen, wie s2 lang
	     if( j1 >m2) break;
	     if(s1.charAt(i1) == s2.charAt(j1)) //Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
	     {
	      posMatch[0] = i1;
	      posMatch[1] = j1;
	      return posMatch;
	     }
	    }
	   }   
  }
  return posMatch;
 }
 
 public static void main(String[] args) 
 { 
	int posMatch[]= new int[2];
	posMatch = firstMatch("SONNE", "SEE");           
 }
}

schon mal vielen Dank!
 

Guardi

Bekanntes Mitglied
Ist es denn zwingend nötig die Suche von der Mitte des Wortes zu beginnen?
Ich finde das verkompliziert die Sache total.
Ich würde einfach den ersten Buchstaben eines Wortes in einen String schreiben und mit dem zweiten Wort vergleichen. Also Vergleiche mit Substrings:

if ( wort.contains(String s) )

Das machst du solange bis ein Treffer vorliegt.
 

---

Aktives Mitglied
Danke für die Antwort.
---
Ist es denn zwingend nötig die Suche von der Mitte des Wortes zu beginnen?
---
Leider ja, das ist eine Übungsaufgabe.
Die ganzen Schleifen machens für mich nicht übersichtlicher, deshalb hab ich gepostet.
Vielleicht gibts ne einfachere Lösung.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Buublesort algo Java Basics - Anfänger-Themen 32
P Eigenschaft eines imperativen Algo (Pseudocode) sofort erkennen Java Basics - Anfänger-Themen 1
V Threads, Peterson Algo. Java Basics - Anfänger-Themen 4
Q rekursiver algo. Java Basics - Anfänger-Themen 16
K Bresenham Algo // wer kennt sich aus? Java Basics - Anfänger-Themen 4
R Größter zusammenhängender Block gleicher Zeichen im String Java Basics - Anfänger-Themen 1
K Java gleicher Wert von Zahlen? Java Basics - Anfänger-Themen 5
B bei 2 Arrays Anzahl gleicher Elemente vergleichen? Java Basics - Anfänger-Themen 49
E JPanels auf gleicher Höhe (Y-Achse) in einem FlowLayout platzieren Java Basics - Anfänger-Themen 7
M In gleicher zeile hinter ausgabe noch etwas ausgeben Java Basics - Anfänger-Themen 1
L Best Practice Code Refactoring für Methoden mit fast gleicher Aufbau Java Basics - Anfänger-Themen 6
E gleicher Name in der Basisklasse und in der Subklasse Java Basics - Anfänger-Themen 45
L Zwei sortierte Subarrays mit gleicher Länge zusammenfügen Java Basics - Anfänger-Themen 2
J Unterschiedliche Ordnerstrukturen trotz gleicher Entwicklungsumgebungen Java Basics - Anfänger-Themen 3
H Würfelspiel, stop bei gleicher Zahl Java Basics - Anfänger-Themen 4
K Anzahl gleicher Elemente in Array Java Basics - Anfänger-Themen 32
B Gleicher Prozess starten und stoppen (Problem beim Stoppen) Java Basics - Anfänger-Themen 5
B Klassen HashMap Zwei Objekte, gleicher Key Java Basics - Anfänger-Themen 4
N Compiler findet array in gleicher methode nicht Java Basics - Anfänger-Themen 4
D Ermitteln der Anzahl gleicher Nachkommastellen 2er Zahlen Java Basics - Anfänger-Themen 9
A Klasse importieren wenn 2 mal gleicher Name Java Basics - Anfänger-Themen 2
I Array und variable gleicher wert, wird jedoch nicht erkannt Java Basics - Anfänger-Themen 4
R Anzahl gleicher Elemente in ArrayList Java Basics - Anfänger-Themen 5
G Gleicher Klassenname in API Java Basics - Anfänger-Themen 2
G in Verzeichnis auf gleicher Ebene wechseln Java Basics - Anfänger-Themen 4
G Abstrakte Methode in gleicher Klasse aufrufen Java Basics - Anfänger-Themen 5
V mehrere Instanzen gleicher Name möglich? Java Basics - Anfänger-Themen 3
G XML nächstes Child element (gleicher name) Java Basics - Anfänger-Themen 5
J Jedes Element in 2 Arrays mit gleicher Position addieren Java Basics - Anfänger-Themen 12
X trotz gleicher variablen nicht equal Java Basics - Anfänger-Themen 5
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
A Bei VierGewinnt Eingabe per Buchstabe (a,b,c...) Java Basics - Anfänger-Themen 2
O Ich habe einen String und soll mit matches schauen, ob ein Buchstabe zu einer geraden ANzahl im String vorkommt, wie soll das gehen? Java Basics - Anfänger-Themen 7
Tom/S KeyCode zu Buchstabe Java Basics - Anfänger-Themen 7
S char auf buchstabe/zeichen prüfen Java Basics - Anfänger-Themen 1
R Buchstabe aus String entfernen Java Basics - Anfänger-Themen 13
Tacofan Hangman - ist der Buchstabe vorhanden wenn ja wo kommt er vor Java Basics - Anfänger-Themen 6
V Ein Wort einlesen und dann jede Buchstabe ausgeben Java Basics - Anfänger-Themen 10
C Buchstabe "K" im zweidimensionalen Array programmieren Java Basics - Anfänger-Themen 1
C Buchstabe programmieren Java Basics - Anfänger-Themen 4
J Buchstabe (char) an zufällige Position eines Strings einfügen Java Basics - Anfänger-Themen 1
D Buchstabe zählen/mappen Java Basics - Anfänger-Themen 3
W Erste Schritte Erster Buchstabe groß bzw. klein???? Java Basics - Anfänger-Themen 2
W Vergleich ob Buchstabe in einem Wort enthalten ist Java Basics - Anfänger-Themen 3
S Liste mit Buchstabe sortiert befüllen Java Basics - Anfänger-Themen 3
K Regex - Jeder buchstabe nur einmal Java Basics - Anfänger-Themen 7
B if equals(irgendeine Zahl+Buchstabe) Java Basics - Anfänger-Themen 6
T String splitten beim wechsel vom buchstabe zu zahl! Java Basics - Anfänger-Themen 8
J Ein Wort einlesen und dann jede Buchstabe ausgeben Java Basics - Anfänger-Themen 25
M regex-Ausdruck irgendein Buchstabe 1 mal Java Basics - Anfänger-Themen 8
H Buchstabe in Programm bringen Java Basics - Anfänger-Themen 6
G Erster Buchstabe groß bzw. klein? Java Basics - Anfänger-Themen 4
S StringBuffer(Buchstabe) -> Double konvertieren Java Basics - Anfänger-Themen 6
A String einlesen 1 Buchstabe fehlt Java Basics - Anfänger-Themen 2
J Nächster Buchstabe, aus IBM wird HAL Java Basics - Anfänger-Themen 2
G 1. Buchstabe eines JList eintrages verschieden farbig machen Java Basics - Anfänger-Themen 12
M String: beginnt mit Buchstabe oder Zahl? Java Basics - Anfänger-Themen 18
G eingabe - buchstabe wird in integerzahl umgewandelt Java Basics - Anfänger-Themen 5
halla zufälligen Buchstabe aus dem Alfabet auswählen Java Basics - Anfänger-Themen 5
M Buchstabe zu Unicode Java Basics - Anfänger-Themen 3
G Prüfen ob Zahl oder Buchstabe Java Basics - Anfänger-Themen 2
K Erster Buchstabe groß Java Basics - Anfänger-Themen 7
G prüfen, ob ein Zeichen ein Buchstabe ist Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben