L46---面试题 01.02. 判定是否互为字符重排(排序)---Java版

1.题目描述

给定两个由小写字母组成的字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
示例 1:

输入: s1 = "abc", s2 = "bca"

输出: true
示例 2:

输入: s1 = "abc", s2 = "bad"

输出: false

2.知识点

(1)public static boolean equals(Object[] a, Object[] a2)

如果两个数组的长度相同,并且所有对应的元素都相等,则返回 true;否则返回 false。

1)字符数组转换:将字符串转换为字符数组 char[]。

2)排序:使用 Arrays.sort 对字符数组进行排序。

3)比较:使用 Arrays.equals 比较两个排序后的字符数组是否相同。

(2)Arrays.sort 方法不仅仅只能排序字符数组,它可以排序各种类型的数组,包括基本数据类型数组(如 int[], char[], double[] 等)以及对象数组(如 String[], Integer[] 等)。Arrays.sort 是一个多态的方法,有多个重载版本来处理不同类型的数组。

java 复制代码
import java.util.Arrays;

public class ArraySortExample {
    public static void main(String[] args) {
        // 整数数组排序
        int[] intArray = {5, 3, 8, 1, 2};
        Arrays.sort(intArray);
        System.out.println("Sorted int array: " + Arrays.toString(intArray));

        // 字符数组排序
        char[] charArray = {'d', 'a', 'c', 'b'};
        Arrays.sort(charArray);
        System.out.println("Sorted char array: " + Arrays.toString(charArray));

        // 字符串数组排序
        String[] stringArray = {"banana", "apple", "cherry", "date"};
        Arrays.sort(stringArray);
        System.out.println("Sorted string array: " + Arrays.toString(stringArray));

        // 双精度浮点数数组排序
        double[] doubleArray = {3.3, 1.1, 4.4, 2.2};
        Arrays.sort(doubleArray);
        System.out.println("Sorted double array: " + Arrays.toString(doubleArray));
    }
}
java 复制代码
Sorted int array: [1, 2, 3, 5, 8]
Sorted char array: [a, b, c, d]
Sorted string array: [apple, banana, cherry, date]
Sorted double array: [1.1, 2.2, 3.3, 4.4]

3.代码实现

java 复制代码
class Solution {
    public boolean CheckPermutation(String s1, String s2) {

        if(s1.length()!=s2.length())
        {
            return false;
        }
        //将字符串变成字符数组 
        char[] c1=s1.toCharArray();
        char[] c2=s2.toCharArray();

        Arrays.sort(c1);//本道题涉及到排序后跟原来字符串一样
        Arrays.sort(c2);
        return Arrays.equals(c1,c2);

    }
    
}

方法2:HashMap

java 复制代码
import java.util.HashMap;
import java.util.Map;

public class AnagramChecker {
    public static boolean areAnagrams(String s1, String s2) {
        // 如果两个字符串长度不同,直接返回 false
        if (s1.length() != s2.length()) {
            return false;
        }

        // 使用 Map 来统计每个字符出现的次数
        Map<Character, Integer> countMap1 = new HashMap<>();
        Map<Character, Integer> countMap2 = new HashMap<>();

        // 统计第一个字符串中每个字符的出现次数
        for (char c : s1.toCharArray()) {
            countMap1.put(c, countMap1.getOrDefault(c, 0) + 1);
        }

        // 统计第二个字符串中每个字符的出现次数
        for (char c : s2.toCharArray()) {
            countMap2.put(c, countMap2.getOrDefault(c, 0) + 1);
        }

        // 比较两个 Map 是否相同
        return countMap1.equals(countMap2);
    }
    }
    
相关推荐
JavaGuide19 分钟前
JDK 25(长期支持版) 发布,新特性解读!
java·后端
用户37215742613520 分钟前
Java 轻松批量替换 Word 文档文字内容
java
白鲸开源21 分钟前
教你数分钟内创建并运行一个 DolphinScheduler Workflow!
java
CoovallyAIHub1 小时前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
Java中文社群1 小时前
有点意思!Java8后最有用新特性排行榜!
java·后端·面试
代码匠心1 小时前
从零开始学Flink:数据源
java·大数据·后端·flink
间彧1 小时前
Spring Boot项目中如何自定义线程池
java
间彧2 小时前
Java线程池详解与实战指南
java
用户298698530142 小时前
Java 使用 Spire.PDF 将PDF文档转换为Word格式
java·后端
NAGNIP2 小时前
Serverless 架构下的大模型框架落地实践
算法·架构