使用递归获得回文的有效方法

时间:2018-03-12 19:11:19

标签: java recursion

我尝试使用像this这样的递归获得回文,但我发现这非常昂贵,因为当我使用substring()方法时,它会创建新的字符串,就像在我的代码中一样:

 public static boolean isPalindrome(String s) {
    if (s.length() <= 1)
        return true;
    else if (s.charAt(0) != s.charAt(s.length() - 1))
        return false;
    else return isPalindrome(s.substring(1, s.length() - 1));
}

有没有其他方法可以提高效率?

1 个答案:

答案 0 :(得分:2)

您可以将完整的原始String和索引传递给它,除非没有创建这么多对象,否则它基本上是相同的。

public static boolean isPalindrome(String s, int start, int end) {
    if ((end-start) <= 1)
        return true;
    else if (s.charAt(start) != s.charAt(end))
        return false;
    else return isPalindrome(s, start+1, end-1);
}

public static boolean isPalindrome(String s) {
    return isPalindrome(s, 0, s.length()-1);
}

substring()共享char[]的内部String时,原始代码效率更高,但是that changed.即便如此,这也是更好的选择,因为即使已共享内部String,仍会创建char[]个对象。