You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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
  }
}

问题分析

  1. 核心逻辑被注释:判断数组是否相等的check方法调用和结果输出代码被全部注释,当前代码仅执行排序并打印arr2元素,直接导致输出不符合预期。
  2. 大小写敏感问题:Arrays.sort()基于ASCII码排序,大写字母ASCII值小于小写字母。"Army"排序后是['A','m','r','y'],"Mary"排序后是['M','a','r','y'],因未统一字符串大小写,两者排序结果无法匹配。
  3. 缺失长度校验:若两个字符串长度不同,必然不是变位词,原代码未做该判断,存在逻辑漏洞。

修复后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 19:54:52