2017-02-15 13 views
0

Nach der Aufnahme von zwei Wörtern, unter Verwendung der Rekursion, um zu bestimmen, ob die Buchstaben des ersten Wortes in irgendeiner Reihenfolge in dem zweiten Wort enthalten sind.Rekursion verwenden, um Buchstaben in einer Zeichenfolge zu vergleichen?

Wir können nur die Zeichenkettenmethode .charAt verwenden und .contains ist auch nicht erlaubt.

Ich dachte, beginnend mit dem ersten Zeichen des ersten Wortes und zu sehen, ob es gleich der Länge des zweiten Wortes -1 charAt war, dann einen Teilstring der Länge -1 zurück, aber das funktioniert nicht richtig.

public static boolean containedWordsCheck(String firstWord,String secondWord) { 
//Recursion 
     if (firstWord.charAt(0) == secondWord.charAt(secondWord.length()-1)) 
      return containedWordsCheck(firstWord.substring(1, firstWord.length()-1),secondWord.substring(1, secondWord.length() - 1)); 
     //If it reaches this far it means the letters in the first string aren't contained in the second string 
     return false; 
+1

Ist das erste Wort ist '„apple“' dann tut es in dem zweiten Wort zwei P sein? – ajb

+1

Wenn die Zeichen im zweiten Wort in beliebiger Reihenfolge ** sein können, schlägt Ihre Logik fehl, weil Sie das erste Zeichen im ersten Wort mit dem _last_ Zeichen im zweiten Wort, aber nicht mit einem anderen Zeichen im zweiten Wort vergleichen zweites Wort. "In beliebiger Reihenfolge" bedeutet, dass dieser Buchstabe irgendwo im zweiten Wort sein könnte, oder? Es gibt andere Fehler in Ihrer Logik, aber Sie müssen sowieso einen besseren Plan aufstellen. – ajb

+0

Haben Sie schon Schleifen studiert? – user3707125

Antwort

0
import java.util.Arrays; 

public class FunLetters { 

    public static void main(String[] args) { 


     String a = "apple"; 
     String b = "pplea"; 

     char[] aArr = a.toCharArray(); 
     Arrays.sort(aArr); 
     char[] bArr = b.toCharArray(); 
     Arrays.sort(bArr); 
     boolean answer = checkForSameString(aArr, bArr, 0); 
     System.out.println(answer); 

    } 


    private static boolean checkForSameString(char[] a, char[] b, int i) { 

     if (i == a.length || i == b.length) 
      return true; 
     if (a[i] == b[i]) 
      return checkForSameString(a, b, i + 1); 
     return false; 
    } 
+0

Dies funktioniert, wenn das gleiche Wort neu angeordnet wird – user121290

0

So etwas sollte funktionieren. Es verwendet die rekursive Hilfsfunktion und nur charAt() wie Sie vorgeschlagen haben. Die Komplexität wird O (n^2) sein. Wenn Sie vorsortieren, wird es viel einfacher, wie Sie in anderen Antworten sehen können.

public boolean containedWordsCheck(String firstWord,String secondWord) { 
    if (firstWord.isEmpty()) { 
     return true; 
    } 
    if (containChar(secondWord, firstWord.charAt(0))) { 
     return true && containedWordsCheck(firstWord.substring(1, firstWord.length()), secondWord); 
    } else { 
     return false; 
    } 
} 

public boolean containChar(String word, char ch) { 
    if (word.isEmpty()) { 
     return false; 
    } 
    if (word.charAt(0) == ch) { 
     return true || containChar(word.substring(1, word.length()), ch); 
    } else { 
     return containChar(word.substring(1, word.length()), ch); 
    } 
} 
+0

Auf der einen Seite ist dies Löffelfütterung und wahrscheinlich nicht der beste Weg, um den Fragesteller zu helfen. Auf der anderen Seite ist die Idee genau richtig. –

+0

@Ole V.V. Du hast Recht, ich werde beim nächsten Mal vorsichtiger sein;). –

Verwandte Themen