Codingbat将递归循环转换为for循环?

时间:2015-11-24 22:21:18

标签: java for-loop recursion

我正在编写codebat作为我即将进行的测验的练习。我正在使用递归来做递归问题,但我的老师说我应该能够使用其他循环来完成它们。我认为我应该使用for循环,因为它们很容易实现相同的结果。

但我无法将递归转换为for循环。

这是问题所在:

Given a string and a non-empty substring sub, compute recursively the number of times that sub appears in the string, without the sub strings overlapping.

strCount("catcowcat", "cat") → 2

strCount("catcowcat", "cow") → 1

strCount("catcowcat", "dog") → 0

这是我尝试使用的代码:

public int strCount(String str, String sub) {
int number = 0;
for (int i = 0; i >= str.length() - 1; i++) {
  if (str.substring(i, sub.length()).equals(sub)) {
    number += 1;
  }
}

return number;
}

当我返回时,一切都返回0。

2 个答案:

答案 0 :(得分:1)

当您说

时,在lol1循环中
for

永远不会输入循环,因为您正在测试i >= str.length() - 1 是否大于允许的长度(并且不是)。你需要像

这样的东西
i

i <= str.length() - 1

此外,i < str.length() 可以写为number += 1;

答案 1 :(得分:0)

您错过的一个细节是“没有子字符串重叠”。这个问题需要一个while循环,而不是for循环,因为索引将增加不同的数量,具体取决于是否匹配。

这是测试strCount方法是否正常工作的可执行代码。

package com.ggl.testing;

public class StringCount {

    public static void main(String[] args) {
        StringCount stringCount = new StringCount();
        System.out.println(stringCount.strCount("catcowcat", "cat"));
        System.out.println(stringCount.strCount("catcowcat", "cow"));
        System.out.println(stringCount.strCount("catcowcat", "dog"));
    }

    public int strCount(String str, String sub) {
        int count = 0;
        int length = str.length() - sub.length();
        int index = 0;

        while (index <= length) {
            int substringLength = index + sub.length();
            if (str.substring(index, substringLength).equals(sub)) {
                count++;
                index += sub.length();
            } else {
                index++;
            }
        }

        return count;
    }

}