给定两个字符串s和t,如果t是s的变位词,则返回true,否则返回false。
变位词是通过重新排列不同单词或短语的字母而形成的单词或短语,通常只使用一次所有原始字母。
示例1:输入:s =“anagram”,t =“nagaram”输出:真
示例2:输入: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,当期望值为false时,我得到的输出为true。
我相信我的代码应该满足问题的要求,但它并没有按预期工作。我的方法包括将给定的字符串转换为char数组,对其进行排序,然后将其与另一个排序过的char数组进行比较。我预计如果两个数组的每个索引值相同,则它们是字谜。但是,似乎我的方法中有一些缺失或不正确的地方。
2条答案
按热度按时间brccelvz1#
排序后,你只需要检查数组是否相等,并将其作为结果返回:
在你的代码中,你应该只在它们不匹配时返回false:
093gszye2#
问题是,您在匹配时没有检查其他字符就短路了字符比较,并过早地返回
true
。你需要在不匹配时短路并返回false
,否则在for循环完成后返回true
。但在比较中重新发明轮子是没有意义的。使用
Arrays.compare
。