有效字母异位词(Valid Anagram)代码为何无法通过示例2?
有效字母异位词判断问题
给定两个字符串s和t,若t是s的有效字母异位词则返回true,否则返回false。有效字母异位词指通过重新排列另一单词或短语的字母形成的单词或短语,通常会精确使用所有原始字母一次。
示例
- 示例1:
输入:s = "anagram", t = "nagaram"
输出:true - 示例2:
输入:s = "rat", t = "car"
输出:false
我的错误代码
import java.util.Arrays; 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; } }
问题分析
代码的核心错误是循环逻辑完全颠倒:只要发现某一个索引的字符相等,就直接返回true,这完全违背了异位词的判断要求。比如示例2中,排序后的s_array是['a','r','t'],t_array是['a','c','r'],第一个字符都是'a',代码就直接返回true,但后续字符完全不匹配,导致结果错误。
正确的逻辑应该是:
- 先判断两个字符串长度是否相等,不相等直接返回
false - 排序后遍历所有字符,只要有一个位置的字符不相等,就返回
false - 所有字符都匹配时,才返回
true
修正后的代码
基础版本
import java.util.Arrays; class Solution { public boolean isAnagram(String s, String t) { // 长度不等直接返回false if (s.length() != t.length()) { return false; } char[] s_array = s.toCharArray(); char[] t_array = t.toCharArray(); Arrays.sort(s_array); Arrays.sort(t_array); // 遍历所有字符,只要有一个不匹配就返回false for (int i = 0; i < s_array.length; i++) { if (s_array[i] != t_array[i]) { return false; } } // 所有字符都匹配,返回true return true; } }
简化版本
可以直接用Arrays.equals()方法比较排序后的数组,简化代码:
import java.util.Arrays; class Solution { public boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false; } char[] sArr = s.toCharArray(); char[] tArr = t.toCharArray(); Arrays.sort(sArr); Arrays.sort(tArr); return Arrays.equals(sArr, tArr); } }
内容的提问来源于stack exchange,提问作者guardianOfTime
相关产品推荐
相关产品推荐

