【问题标题】:Efficient way to get palindrome using recursion使用递归获得回文的有效方法
【发布时间】:2018-03-12 19:11:19
【问题描述】:

我正在尝试使用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));
}

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

【问题讨论】:

    标签: java recursion


    【解决方案1】:

    您可以将完整的原始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() 共享String 的内部char[] 时,原始代码效率更高,但that changed. 即使那样,这也是一个更好的选择,因为String 对象仍然被创建即使内部 char[] 已共享。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-28
      • 2015-07-22
      • 2020-04-02
      • 2020-09-09
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多