如何判断两个字符串是否为变位词?

我们要解题,先要了解什么是“变位词”,一种把某个词或句子的字母的位置(顺序)加以改换所形成的新词。

例如:said(说,say的过去式)就有dais(讲台)这个变位词。

例题:假设有两个字符串s和t,请问如何判断它们是否为变位词?

分析:我们可以使用哈希表来解决这个问题。具体实现时,我们可以定义两个哈希表map1和map2,分别统计字符串s和t中每个字符出现的次数,然后比较两个哈希表是否相等即可。

Java代码实现:

public static boolean isAnagram(String s, String t) {
    if (s == null || t == null || s.length() != t.length()) {
        return false;
    }
    Map<Character, Integer> map1 = new HashMap<>();
    Map<Character, Integer> map2 = new HashMap<>();
    for (int i = 0; i < s.length(); i++) {
        char c1 = s.charAt(i);
        char c2 = t.charAt(i);
        map1.put(c1, map1.getOrDefault(c1, 0) + 1);
        map2.put(c2, map2.getOrDefault(c2, 0) + 1);
    }
    return map1.equals(map2);
}

代码分析:

  • 定义两个哈希表map1和map2,分别统计字符串s和t中每个字符出现的次数。
  • 比较两个哈希表是否相等。