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

如何对字符串排序并检测变位词?Java选择排序实现问题求助

问题排查与修复

1. 字符串处理逻辑错误

Java中String是不可变类,trim()、toLowerCase()等方法不会修改原字符串,只会返回处理后的新字符串,你没有接收返回值,所以处理逻辑完全不生效。另外trim()只能移除字符串首尾的空格,无法移除中间的空格,要忽略所有空格需要用replace(" ", "")替换所有空格字符。

2. 选择排序实现错误

你把交换逻辑写在了内层循环内部,会导致每找到一个更小的元素就执行一次交换,完全不符合选择排序「先遍历找到当前区间最小元素的下标,再统一执行一次交换」的逻辑,所以长字符串排序结果混乱。

3. 数组比较逻辑错误

==用于数组比较时,对比的是两个数组的内存地址,不是数组内容,要比较两个char数组的内容是否一致,需要使用Arrays.equals()方法。


修复后的完整代码

import java.util.Arrays;

public class AnagramChecker {
    public static void selectionSort(char[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            int least = i;
            // 内层循环仅负责查找当前区间最小元素的下标
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[least]) {
                    least = j;
                }
            }
            // 找到最小下标后再执行单次交换
            if (least != i) {
                char swap = arr[i];
                arr[i] = arr[least];
                arr[least] = swap;
            }
        }
    }

    public static boolean anagramCheck(String x, String y) {
        // 接收处理后的新字符串:移除所有空格+统一转小写
        x = x.replace(" ", "").toLowerCase();
        y = y.replace(" ", "").toLowerCase();

        // 长度不同直接判定不是变位词
        if (x.length() != y.length()) {
            return false;
        }

        char[] xArr = x.toCharArray();
        char[] yArr = y.toCharArray();

        selectionSort(xArr);
        selectionSort(yArr);

        // 对比两个排序后数组的内容
        boolean isAnagram = Arrays.equals(xArr, yArr);
        if (isAnagram) {
            System.out.println("It's an anagram.");
        }
        return isAnagram;
    }

    // 测试用例
    public static void main(String[] args) {
        System.out.println(anagramCheck("Listen", "Silent")); // 输出true
        System.out.println(anagramCheck("Hello World", "world hello")); // 输出true
        System.out.println(anagramCheck("Apple", "Pale")); // 输出false
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:27:04