← 返回归档
力扣简单

力扣-242. 有效的字母异位词

给你两个字符串 s 和 t,判断 t 是否是 s 的字母异位词。 两个字符串包含的字符种类和每个字符出现的次数完全一样,只是排列顺序可以不同。

Published
Reading
1 分钟
Version
01

Map:

function isAnagram(s: string, t: string): boolean {
  if (s.length !== t.length) {
    return false
  }

  const count = new Map<string, number>()

  for (const char of s) {
    count.set(char, (count.get(char) ?? 0) + 1)
  }

  for (const char of t) {
    const current = count.get(char)

    if (!current) {
      return false
    }

    count.set(char, current - 1)
  }

  return true
}

26 长度数组:

function isAnagram(s: string, t: string): boolean {
  if (s.length !== t.length) {
    return false
  }

  const count = new Array<number>(26).fill(0)

  for (let i = 0; i < s.length; i++) {
    const sIndex = s.charCodeAt(i) - 97
    const tIndex = t.charCodeAt(i) - 97

    count[sIndex]++
    count[tIndex]--
  }

  return count.every((value) => value === 0)
}

方案

时间复杂度

空间复杂度

特点

Map 计数

O(n)

O(k)

通用性强

26 长度数组

O(n)

O(1)

⭐ 本题推荐

这里的:

k

表示不同字符的数量。

为什么长度 26 的数组可以认为:

O(1)

?

因为不管字符串有:

10 个字符
10000 个字符
100 万个字符

这个数组永远只有:

26 个位置

它不会随着输入规模变大。

因此空间复杂度是:

O(1)