2017-02-15 107 views
0

接受兩個單詞後,利用遞歸確定第一個單詞的字母是否包含在第二個單詞的任意順序中。使用遞歸比較字符串中包含的字母?

我們只能使用.charAt字符串方法,而且.contains也是不允許的。

我在考慮從第一個單詞的第一個字符開始,看它是否等於第二個單詞-1的長度charAt,然後返回一個長度爲-1的子字符串,但這不能正常工作。

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

如果第一個單詞是「apple」,那麼在第二個單詞中是否必須有兩個p? – ajb

+1

如果第二個單詞中的字符可以是任意順序**,那麼您的邏輯將失敗,因爲您將第一個單詞中的第一個字符與第二個單詞中的_last_字符進行比較,而不是第二個單詞中的任何其他字符第二個字。 「以任何順序」意味着角色可以在第二個單詞中的任何地方,對嗎?你的邏輯還有其他的錯誤,但你仍然需要制定一個更好的計劃。 – ajb

+0

你已經學過循環了嗎? – user3707125

回答

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

當同一個單詞重新排列時,這種方式可以工作 – user121290

0

這樣的事情應該工作。它正在使用助手遞歸函數,並且只有您提出的charAt()。複雜性將是O(n^2)。如果你做了預先排序,它會更容易,你可以在其他答案中看到。

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

一方面,這是勺子餵養,可能不是幫助提問者的最佳方式。另一方面,這個想法是完全正確的。 –

+0

@ Ole V.V.你是對的,下次我會更加小心;)。 –