给定两个字符串s和t,编写一个函数来确定t是否是s的anagram。
例1:
输入:s=“anagram”,t=“nagaram”
输出:真
例2:
输入:s=”rat”,t=”car”
输出:false
例3
“AAD”
“出租车”
输出
真的
预期
假
我的3个测试用例给出的输出是真的为什么?
class Solution {
public boolean isAnagram(String s, String t) {
if (s.isEmpty() && t.isEmpty()) {
return true;
}
if (s.length() != t.length()) {
return false;
}
char[] a = s.toCharArray();
char[] b = t.toCharArray();
Arrays.sort(a);
Arrays.sort(b);
for (int i = 0; i <= a.length; i++) {
for (int j = 0; j <= b.length; j++) {
if (a[i] == b[j]) {
return true;
}
}
}
return false;
}
}
最佳答案
通过使用嵌套for循环,您将在每个可能的对(i,j)上迭代,i和j an分别位于idex的a
和b
中此外,您使用i++
和j++
两次,因此您将跳过偶数索引。您不能从true
匹配时返回a[i++] == b[j++]
。为了知道某个东西是否是一个anagram,您需要遍历所有元素但是,您可以从false
开始返回a[i] != b[i]
最后,界限应该是i < a.length
,而不是i <= a.length
。
因此,您需要一个for
循环,在这个循环中进行一次增量并将a[i]
与b[i]
进行比较:
public boolean isAnagram(String s, String t) {
if(s.length() != t.length()){
return false;
}
char[] a = s.toCharArray();
char[] b = t.toCharArray();
Arrays.sort(a);
Arrays.sort(b);
for(int i = 0; i < a.length; i++) {
if(a[i] != b[i]) {
return false;
}
}
return true;
}