当我试图将两个字符串作为函数的输入并检查它们是否为字谜时,我得到了错误的输出。我写了以下代码。
class Solution {
public boolean isAnagram(String s, String t) {
char sArray[] = s.toCharArray();
char tArray[] = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
s = sArray.toString();
t = tArray.toString();
return s.equals(t);
}
}我所接受的示例输入是s = "anagram" and t = "nagaram"。如果选中,两个char数组将打印相同的值,即
sArray is:
aaagmnr
tArray is:
aaagmnr但我的输出似乎是错误的。有谁能帮我一下,为什么我在toString()后使用toString()时会得到这样的结果?
发布于 2020-10-11 06:17:48
到String的转换是不正确的,因为数组不覆盖toString()的Object实现。
也就是说,没有理由将数组转换为String来比较它们。您可以使用Arrays.equals直接比较它们,这将返回真正的if both arrays contain the same number of elements, and all corresponding pairs of elements in the two arrays are equal。
char sArray[] = s.toCharArray();
char tArray[] = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
return Arrays.equals(sArray,tArray);发布于 2020-10-11 06:21:52
下面的代码行不将char数组转换为字符串:
s = sArray.toString();
t = tArray.toString();这只会将地址转换为字符串,以便将数组转换为您应该使用的字符串:Arrays.toString(arrName)
现在代码将如下所示:
public static boolean isAnagram(String s, String t) {
char sArray[] = s.toCharArray();
char tArray[] = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
s = Arrays.toString(sArray);
t = Arrays.toString(tArray);
return s.equals(t);
}发布于 2020-10-11 06:23:08
在这里,从对象类继承的称为toString()方法的char数组上的toString()是:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}因此,使用String.valueOf再次将字符数组转换为字符串。
s = String.valueOf(sArray);
t = String.valueOf(tArray);因为您只需要比较,所以可以使用Arrays.equals()直接比较字符数组。
return Arrays.equals(sArray,tArray);https://stackoverflow.com/questions/64301132
复制相似问题