我尝试使用像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));
}
有没有其他方法可以提高效率?
答案 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[]
个对象。