【问题标题】:Codingbat recursion to while loop?Codingbat递归到while循环?
【发布时间】:2016-02-27 16:59:27
【问题描述】:

我知道递归系列上写满了“不要使用循环”,但我还是决定用循环来练习。我正在研究 strDist() ,但我似乎无法完全理解它。

问题:

给定一个字符串和一个非空子字符串 sub,递归计算以 sub 开头和结尾的最大子字符串并返回其长度。

strDist("catcowcat", "cat") → 9
strDist("catcowcat", "cow") → 3
strDist("cccatcowcatxx", "cat") → 9

我的代码:

public int strDist(String str, String sub) {
    int min = 0;
    int max = str.length() - 1;
    int index = 0;
    if (str.isEmpty()) {
        return 0;
    }
    while (index < str.length()) {
        if (str.substring(index, index + sub.length()).equals(sub)) {
            min = index;
            index = str.length();
        }
        index++;
    }
    index = str.length() - 1;
    while (index >= 0) {
        if (str.substring(index - sub.length(), index).equals(sub)) {
            max = index;
            index = 0;
        }
        index--;
    }
    return max - min;
}

【问题讨论】:

    标签: java recursion while-loop


    【解决方案1】:

    除非出于某些原因您必须重新发明轮子,否则请使用 String.indexOf(String)String.lastIndexOf(String) 之类的

    public static int strDist(String str, String sub) {
        if (str.contains(sub)) {
            return sub.length() + str.lastIndexOf(sub) - str.indexOf(sub);
        }
        return 0;
    }
    

    【讨论】:

    • @Codebender 哎呀。谢谢。我没有重新测试就删除了临时变量。那太傻了。
    • 它并不真正符合用循环解决递归练习的标准。
    猜你喜欢
    • 2013-08-12
    • 2012-08-04
    • 2021-05-03
    • 2018-08-15
    • 1970-01-01
    • 2020-09-05
    • 2020-06-28
    • 1970-01-01
    相关资源
    最近更新 更多