给定两个字符串 s 和 t,如果 t 是 s 的变位词则返回 true,否则返回 false。
Anagram 是通过重新排列不同单词或短语的字母而形成的单词或短语,通常只使用所有原始字母一次。
例一: 输入:s = "anagram", t = "nagaram" 输出:真
例二: 输入:s = "rat", t = "car" 输出:假
class Solution {
public boolean isAnagram(String s, String t) {
char[] s_array = s.toCharArray();
char[] t_array = t.toCharArray();
Arrays.sort(s_array);
Arrays.sort(t_array);
if (s_array.length == t_array.length) {
for (int i = 0; i <= s_array.length-1; i++) {
if (s_array[i] == t_array[i]) {
return true;
}
}
}
return false;
}
}
对于示例 2,当预期为假时,我得到的输出为真。
我相信我的代码应该能满足问题的要求,但它没有按预期工作。我的方法涉及将给定的字符串转换为 char 数组,对其进行排序,然后将其与另一个排序的 char 数组进行比较。我希望如果两个数组的每个索引具有相同的值,那么它们就是字谜。但是,我的方法似乎缺少或不正确。
排序后你只需要检查数组是否相等并返回结果:
class Solution {
public boolean isAnagram(String s, String t) {
char[] s_array = s.toCharArray();
char[] t_array = t.toCharArray();
Arrays.sort(s_array);
Arrays.sort(t_array);
return Arrays.equals(s_array,t_array);
}
}
在您的代码中,您应该只在它们不匹配时返回 false:
class Solution {
public boolean isAnagram(String s, String t) {
char[] s_array = s.toCharArray();
char[] t_array = t.toCharArray();
Arrays.sort(s_array);
Arrays.sort(t_array);
if (s_array.length == t_array.length) {
for (int i = 0; i <= s_array.length-1; i++) {
if (s_array[i] != t_array[i]) {
return false;
}
}
return true;
}
return false;
}
}