2017-02-15 8 views
0

После двух слов, используя рекурсию, чтобы определить, содержатся ли буквы первого слова в ЛЮБОЙ ЗАКАЗ во втором слове.Использование Recursion для сравнения букв, содержащихся в строке?

Мы можем использовать только метод string .charAt и .contains также не допускается.

Я думал, начиная с первого символа первого слова и видя, был ли он равен charAt длине второго слова -1, а затем возвратил подстроку длиной -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

Если первое слово '«яблоко»' то сделать там должны быть два р во втором слове? – 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. Вы правы, я буду более осторожен в следующий раз;). –

 Смежные вопросы

  • Нет связанных вопросов^_^