java - isSubstring递归方法

标签 java methods recursion substring

下面是调用递归方法的代码:

if (isSubstring(str1, str2))
    System.out.println ("\"" + str1 + "\" is a substring of " +
                        "\"" + str2 + "\"");
else
    System.out.println ("\"" + str1 + "\" is not a substring of " + 
                       "\"" + str2 + "\"");

这是我到目前为止完成的方法,它几乎可以工作:

public static boolean isSubstring(String str, String target)
{   
    if (target.length() == 0)
        return false;

    if (str.equals(target))
        return true;

    else     
        return (isSubstring(str, target.substring(0,target.length()-1)));            
}

因此,如果将 str1 作为“zzz”传递,将 str2 作为“zzzabcdef”传递,则它会返回 true。但是,如果 str2 是“abczzzxx”或“abczzz”,它不会返回 true。有没有人有任何建议或想法?

最佳答案

是的 - 基本上你的递归方法总是只是去掉最后一个字符,然后递归,直到它有一个空字符串或者值等于第一个字符串。

这意味着它可以找到第一个字符串的唯一可能位置是目标字符串的开头,这意味着它实际上是一个startsWith 方法。

一个效率极低但我认为应该可行的选项是尝试从前面去掉一个字符尝试从末尾(独立地)去掉一个字符:

return isSubstring(str, target.substring(0, target.length() - 1))
    || isSubstring(str, target.substring(1));

关于java - isSubstring递归方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13292651/

相关文章:

methods - 如何使用标准函数调用方法对象

javascript - 向 jQuery 对象添加新方法

java - retrofit Minecraft 错误

java - Netty ChannelFuture 是如何工作的?

java - 在 NetBeans Maven 项目中设置 linksource 属性

java - 为什么我在这段代码中收到无限递归警告,尽管它不是无限的?

java - 使用深度优先搜索遍历矩阵找出渗流

java - 为什么我们不能将整数对象转换为字符串对象?

java - 运行自定义平方根函数时出错 (Java)

list - 在 Haskell 中将元素插入列表中给定的索引