使用递归来比较字符串中包含的字母?

时间:2017-02-15 05:00:25

标签: java recursion

在接受两个单词后,利用递归来确定第一个单词的字母是否包含在第二个单词的任何顺序中。

我们只能使用.charAt字符串方法,也不允许使用.contains。

我想从第一个单词的第一个字符开始,看它是否等于charAt第二个单词的长度为-1,然后返回长度为-1的子字符串,但这不能正常工作。 / p>

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;

2 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分: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);
    }
}