mystery4 method

// note: overlapping matches count repeatedly
public static int countMatches(String str, String pattern)
{
    if(str.length() < pattern.length())
        return 0;
    
    int matches = countMatches(str.substring(1), pattern);
    
    if(str.substring(0, pattern.length()).equals(pattern))
        matches++;
    
    return matches;
}

The method counts the number of times p/pattern appears in str.

The base case is if str is shorter than p/pattern, in which case str cannot contain p/pattern. This base case is important because the call to substring assumes that str is at least as long as p/pattern.

The conditional statement checks if the first p.length()/pattern.length() letters of str are p/pattern. In other words, the conditional statement checks if str starts with p/pattern. As with mystery1/countOddDigits, the method either adds 1 or does not depending on the condition, so it is counting.

mystery3 solution
mystery5 solution
Exercises
All solutions