2017-02-15 22 views
0

2つの単語を取った後、再帰を利用して、最初の単語の文字が2番目の単語の任意の順序に含まれているかどうかを判断します。再帰を使用して文字列に含まれる文字を比較しますか?

.charAt文字列メソッドのみを使用でき、.containsも使用できません。

最初の単語の最初の文字から始まり、それが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

最初の単語は '「りんご」' 2つのpの2番目の単語であることをそこに持っているんですか? – ajb

+1

2番目の単語の** **任意の順序で**文字を使用できる場合、最初の単語の最初の文字と2番目の単語の_last_文字を比較しているため、ロジックが失敗します。 2番目の単語。 「任意の順序で」とは、その文字が2番目の単語のどこにでもある可能性があることを意味します。あなたのロジックには他にも誤りがありますが、とにかくより良い計画を立てる必要があります。 – 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.あなたは正しい、私は次回より慎重になるだろう;)。 –

関連する問題