我遇到麻省理工学院关于递归的讲座,他们使用递归检查回文,然后他们使用逻辑检查它,他们比较第一个和最后一个字母表等等。 我认为的是以下内容
只是一个伪代码:
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()
方法如何检查字符串是否相等?它比较字节码还是什么?答案 0 :(得分:3)
您应该使用equals
,而不是compareTo
,因为compareTo会返回一个int,而不是您if
条件所期望的布尔值。或者,您可以检查if (original.compareTo(reverse)==0)
,这意味着字符串相等。
关于compareTo如何工作,它比较具有相同索引的每对字符,并返回第一个非相等对之间的差异。如果all相等,则返回0。
答案 1 :(得分:1)
CompareTo将遍历字符串中的每个字符。如果角色更大/更小(基于字母顺序),它将返回正/负数。
因此当string1.compareTo(reverseString)==0
两个字符串相同时。 (没有单个字母小于/大于另一个字母中的字母)
由于您没有提供递归实现,因此很难对性能特征做出任何说明。
答案 2 :(得分:1)
这个逻辑在方面比递归或传统逻辑更好 时间复杂度?
假设您使用以下递归方法,
public static boolean isPal(String s)
{
if(s.length() == 0 || s.length() == 1)
return true;
if(s.charAt(0) == s.charAt(s.length()-1))
return isPal(s.substring(1, s.length()-1));
return false;
}
时间复杂度:O(n)
<强>等于:强>
public boolean equals(Object paramObject)
{
if (this == paramObject) {
return true;
}
if ((paramObject instanceof String))
{
String str = (String)paramObject;
int i = this.value.length;
if (i == str.value.length)
{
char[] arrayOfChar1 = this.value;
char[] arrayOfChar2 = str.value;
for (int j = 0; i-- != 0; j++) {
if (arrayOfChar1[j] != arrayOfChar2[j]) {
return false;
}
}
return true;
}
}
return false;
}
程序的复杂程度为:O(n)+ O(n)= O(n)
compareTo()方法如何检查字符串是否相等?可以 比较字节码或什么?
compareTo:如果两个字符串相同则返回0,否则返回第一个不匹配字符的差异,整数差异(即Unicode值的差异),
通过比较两个字符串的相同位置的字符
来实现 public int compareTo(String paramString)
{
int i = this.value.length;
int j = paramString.value.length;
int k = Math.min(i, j);
char[] arrayOfChar1 = this.value;
char[] arrayOfChar2 = paramString.value;
for (int m = 0; m < k; m++)
{
int n = arrayOfChar1[m];
int i1 = arrayOfChar2[m];
if (n != i1) {
return n - i1;
}
}
return i - j;
}
答案 3 :(得分:0)
1:就时间复杂度而言,这种逻辑比递归或传统逻辑更好 在Java中,与迭代(通常)相比,递归相当昂贵,因为它需要分配新的堆栈帧。 如果你正在使用像C这样的函数式语言,递归可能会更快。如果您使用像Java这样的命令式语言,迭代可能会更快。
2:compareTo()方法如何检查字符串是否相等
如果参数是一个按字典顺序排列等于该字符串的字符串,则值为0;如果参数是按字典顺序大于此字符串的字符串,则小于0的值;如果参数是一个按字典顺序小于该字符串的字符串,则值大于0。