为何Arrays.sort()在Anagram校验场景下失效?代码排障咨询
Java变位词校验代码问题排查
我编写了一段用于校验变位词(Anagram)的Java代码,计划通过Arrays.sort()对字符数组排序后对比,但变量smth对应的数组无法完成排序。使用测试用例"Army"和"Mary"时,"Army"对应的数组能正常排序,而"Mary"对应的数组未排序。当前代码运行该测试用例时,输出为"Mary",预期输出应为"True"。
测试用例信息
您的代码未通过该测试用例。
输入(标准输入):Army Mary
您的输出(标准输出):Mary
预期输出:True
问题代码
import java.util.*; public class Solution { public static void main(String[] args) { Scanner get = new Scanner(System.in); String word1 = get.next(); char[] arr1 = word1.toCharArray(); String smth = get.next(); char[] arr2 = smth.toCharArray(); // Sort both arrays Arrays.sort(arr2); Arrays.sort(arr1); for(char ele:arr2) System.out.print(ele); // // Call the check method and print the result // if (check(arr1, arr2)) // System.out.print("True"); // else // System.out.print("False"); // } // public static boolean check(char[] arr1, char[] arr2) { // // Compare sorted arrays character by character // for (int i = 0; i < arr1.length; i++) { // if (arr1[i] != arr2[i]) { // return false; // If any characters do not match, return false // } // } // return true; // All characters match, so return true } }
问题分析
- 核心逻辑被注释:判断数组是否相等的
check方法调用和结果输出代码被全部注释,当前代码仅执行排序并打印arr2元素,直接导致输出不符合预期。 - 大小写敏感问题:
Arrays.sort()基于ASCII码排序,大写字母ASCII值小于小写字母。"Army"排序后是['A','m','r','y'],"Mary"排序后是['M','a','r','y'],因未统一字符串大小写,两者排序结果无法匹配。 - 缺失长度校验:若两个字符串长度不同,必然不是变位词,原代码未做该判断,存在逻辑漏洞。
修复后的代码
import java.util.*; public class Solution { public static void main(String[] args) { Scanner get = new Scanner(System.in); // 统一转为小写,消除大小写差异 String word1 = get.next().toLowerCase(); char[] arr1 = word1.toCharArray(); String smth = get.next().toLowerCase(); char[] arr2 = smth.toCharArray(); // 排序两个字符数组 Arrays.sort(arr2); Arrays.sort(arr1); // 调用校验方法并输出结果 if (check(arr1, arr2)) System.out.print("True"); else System.out.print("False"); } public static boolean check(char[] arr1, char[] arr2) { // 先判断长度是否一致,不一致直接返回false if (arr1.length != arr2.length) { return false; } // 逐字符对比排序后的数组 for (int i = 0; i < arr1.length; i++) { if (arr1[i] != arr2[i]) { return false; } } return true; } }
内容的提问来源于stack exchange,提问作者Sarath Siddharth
相关产品推荐
相关产品推荐

