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

Java中判断两个字符串是否互为排列的方法及代码运行异常求解

Java排列判断代码问题排查

核心错误点

  • 循环下标越界:你写的for循环终止条件为i <= arr1.length、j <= arr2.length,Java数组下标从0开始,最大合法下标为数组长度-1,当循环变量等于数组长度时,访问数组元素会直接抛出ArrayIndexOutOfBoundsException,程序直接崩溃无法输出预期结果。
  • 对比逻辑完全错误:你已经提前对两个字符数组做了排序,互为排列的两个字符串排序后相同下标的字符一定完全一致,不需要双层循环比对。你现有双层循环的逻辑是要求arr1的每一个字符和arr2的所有字符都相等,只有当字符串所有字符完全相同时才会返回true,你的测试用例abcrdt和barcdt排序后为abcdrt和abcdrt,i=0时j=1就会用arr1[0]的a和arr2[1]的b比对,直接返回false,自然不会输出可排列的提示。
  • 额外注意:如果运行时提示找不到Arrays类,需要在代码文件头部引入类:import java.util.Arrays;

修正后的代码

适配原有逻辑的isPermutation方法

static boolean isPermutation(char[] arr1, char[] arr2) {
    if (arr1.length != arr2.length) {
        return false;
    }
    // 排序后仅需单层循环对比同下标字符
    for (int i = 0; i < arr1.length; i++) {
        if (arr1[i] != arr2[i]) {
            return false;
        }
    }
    return true;
}

优化方案(无需排序,时间复杂度更低)

如果处理的字符串仅包含ASCII字符,可以用计数法降低时间开销:

static boolean isPermutation(String str1, String str2) {
    if (str1.length() != str2.length()) {
        return false;
    }
    int[] count = new int[128];
    for (char c : str1.toCharArray()) {
        count[c]++;
    }
    for (char c : str2.toCharArray()) {
        count[c]--;
        if (count[c] < 0) {
            return false;
        }
    }
    return true;
}

内容的提问来源于stack exchange,提问作者SarahLep

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 04:45:01