返回轨道
算法 · 2026-05-14 · 18 阅读

P209 变位词校验

算法 18 阅读

信号摘要

难度:Easy · 时长:07:08 · leetcode 242 · lintcode 158

P209 变位词校验

未对外公开播放权限
点击查看说明

描述

这个题目说的是,给你两个字符串 s 和 t,你要写函数判断 t 是否为 s 的一个变位词。

其中,字符串只由小写字母组成。变位词指的是使用相同字母以不同顺序构成的单词。

比如说,给你的字符串 s 和 t 是:

s = "eat" t = "tea"

这两个字符串都是由 a/e/t 这三个字母构成,因此 t 是 s 的一个变位词。

如果 s 和 t 改成:

s = "eat" t = "ten"

"ten" 中的字符 n 不存在于字符串 s 中。因此,它不是 s 的一个变位词。

相关视频:变位词分组,查找字符串中所有变位词

代码

public class AlgoCasts {

  // Time: O(n*log(n)), Space: O(n)
  public boolean isAnagramSort(String s, String t) {
    if (s == null || t == null || s.length() != t.length()) return false;
    char[] sc = s.toCharArray();
    char[] tc = t.toCharArray();
    Arrays.sort(sc);
    Arrays.sort(tc);
    for (int i = 0; i < sc.length; ++i)
      if (sc[i] != tc[i])
        return false;
    return true;
  }

  // Time: O(n), Space: O(1)
  public boolean isAnagramCount(String s, String t) {
    if (s == null || t == null || s.length() != t.length()) return false;
    int[] counts = new int[26];
    for (int i = 0; i < s.length(); ++i) {
      counts[s.charAt(i) - 'a']++;
      counts[t.charAt(i) - 'a']--;
    }
    for (int i = 0; i < 26; ++i)
      if (counts[i] != 0)
        return false;
    return true;
  }

}

📡 通讯频道