簡體   English   中英

使用遞歸的indexOf方法

[英]indexOf method using recursion

我需要編寫一個名為indexOf的遞歸方法,該方法接受兩個String作為參數,並返回第一個String內第二個String第一次出現的起始索引(如果未找到則返回-1)。 我必須使用遞歸解決此問題。 這些是一些示例結果:

indexOf("Barack Obama", "Bar")  0

indexOf("Barack Obama", "ck")  4

indexOf("Barack Obama", "a")  1

indexOf("Barack Obama", "McCain")  -1

indexOf("Barack Obama", "BAR")  -1

這是我的解決方案,但是它給我indexOf(“ Barack Obama”,“ McCain”)的6而不是-1。

public static int indexOf(String s1, String s2) {
        if(s1.equals(s2))
            return 0;

        else
            return indexOfHelper(s1, s2, 0); 
    }
private static int indexOfHelper(String s1, String s2, int ctr) {
        if(s2.length() > s1.length())
            return -1;

        if(s2.length() == 0 || s1.length() == 0)    //base case
            return ctr;     

        else                    //recursive case
            if(s1.charAt(0) == s2.charAt(0)){       //if there is a matching character
                if(s1.substring(0, s2.length()).equals(s2))
                    return ctr;     //if there is a matching character and the rest of the strings match as well
                else
                    return -1;        //if there is a matching character but the rest of the strings don't match
            }
            else
                return 1 + indexOfHelper(s1.substring(1), s2, ctr);

}

我必須說,遞歸步驟非常棘手。 它通過了所有測試用例。 希望以下內容對您有所幫助。 Java和C ++代碼在這里

爪哇

int indexOf (String s1, String s2) {

    if (s1.length() == 0 && s2.length() == 0) {
        return 0;
    } else if (s1.length() == 0) {
        return -1;
    } else if (s2.length() == 0) {
        return 0;
    } else if (s2.length()>s1.length()) {
        return -1;
    }
    else if (s1.charAt(0)  == s2.charAt(0)) {
        int subIndex = indexOf(s1.substring(1),s2.substring(1));
        return  subIndex == -1 ? -1: subIndex;


    } else {
        int subIndex = indexOf(s1.substring(1),s2);
        return  subIndex == -1 ? -1: subIndex+1;
    }

}

這里的C ++代碼

int indexOf (string s1, string s2) {

        if (s1 == "" && s2 == "") {
            return 0;
        } else if (s1 == "") {
            return -1;
        } else if (s2=="") {
            return 0;
        } else if (s2.size()>s1.size()) {
            return -1;
        }
        else if (s1 [0] == s2[0]) {
            int subIndex = indexOf(s1.substr(1,s1.length()),s2.substr(1,s2.length()));
            return  subIndex == -1 ? -1: subIndex;


        } else {
            int subIndex = indexOf(s1.substr(1,s1.length()),s2);
            return  subIndex == -1 ? -1: subIndex+1;
        }

    }

這是我的解決方案

public static void main(String[] args) {
    System.out.println(indexOf("Ninja!", "i"));
    System.out.println(indexOf("ninja2", "ja2"));
    System.out.println(indexOf("ninja2", "hae"));
}

public static int indexOf(String s, String contains) {
    if (contains.length() > s.length()) {
        return -1;
    }
    return indexOf(s, contains, 0);
}

private static int indexOf(String s, String contains, int index) {
    if ((s.length() - contains.length()) < index) {
        return -1;
    }
    if (s.substring(index, index + contains.length()).equals(contains)) {
        return index;
    } else {
    return indexOf(s, contains, index + 1);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM