递归理解java中的compareto()方法
我遇到了麻省理工学院关于递归的讲座,他们用递归检查回文,在那里他们用逻辑检查回文,比较第一个字母和最后一个字母等等。。 我的想法如下
只是一个伪代码:
String original="abba";
String reverse = "";
for(int i=original.length()-1;i>=0;i--)
{
reverse+=new String(original.substring(i,i+1));
}
if(original.equals(reverse))
System.out.println("palindrome");
else
System.out.println("not palindrome");
我有两个疑问
- 在时间复杂度方面,这种逻辑比递归或传统逻辑好吗李>
compareTo()
方法如何检查字符串是否相等?它比较字节码还是什么李>
# 1 楼答案
您应该使用,这意味着字符串相等
equals
,而不是compareTo
,因为compareTo返回的是int,而不是if
条件所期望的布尔值。或者,您可以选中^{至于compareTo是如何工作的,它会比较具有相同索引的每对字符,并返回第一对不相等字符之间的差异。如果全部相等,则返回0
# 2 楼答案
假设您使用以下递归方法
时间复杂度:O(n)
等于:
你的程序的复杂性是:O(n)+O(n)=O(n)
compareTo:如果两个字符串相同,则返回0,否则返回第一个不匹配字符的差分、整数差分(即Unicode值的差分)
它通过比较两个字符串相同位置的字符来实现
# 3 楼答案
CompareTo将在字符串中的每个字符上循环。如果字符较大/较小(基于字母顺序),它将返回一个正数/负数
因此,当
string1.compareTo(reverseString)==0
时,这两个字符串是相同的。(没有一个字母比另一个字符串中的字母小/大)因为您没有提供递归实现,所以很难说性能特征