leetcode-字符串-242-有效的字母异位词

242.有效的字母异位词

描述

  • 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

示例 1

    输入: s = "anagram", t = "nagaram"
    输出: true

示例 2

    输入: s = "rat", t = "car"
    输出: false

思路 1

  • 1.将字符串转成数组
  • 2.利用数组sort方法进行排序
  • 3.将数组转成字符串,依次比较字符是否相等,如果全相等,返回true,否则返回false

解法 1

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {
    // 先判断两个字符串长度是否相等,不相等直接返回false
    if (s.length !== t.length) {
        return false;
    }

   // 将字符串转成数组
   let sArr = s.split('');
   let tArr = t.split('');

   // 排序函数
   const sortFn = (a,b) => a.charCodeAt() - b.charCodeAt();

   // 进行排序
   sArr.sort(sortFn);
   tArr.sort(sortFn);

   // 依次比较字符
   return sArr.join('') === tArr.join('');
};

复杂度分析 1

  • 时间复杂度:O(nlogn)

    • JavaScript 的 sort 方法的实现原理,当数组长度小于等于 10 的时候,采用插入排序,大于 10 的时候,采用快排,快排的平均时间复杂度是 。
  • 空间复杂度:O(n)

    • 算法中申请了 2 个数组变量用于存放字符串分割后的字符串数组,所以数组空间长度跟字符串长度线性相关,所以为 。

思路 2

  • 1.定义一个对象,遍历其中的一个字符串,对每个字符串的个数累加
  • 2.遍历另一个字符串,使每一个字母在已得到的对象中做匹配,如果匹配则对象下的字母个数减 1,如果匹配不到,则返回 false,如果最后对象中每个字母个数都为 0,则表示两字符串相等。

代码

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {
    // 先判断两个字符串长度是否相等,不相等直接返回false
    if (s.length !== t.length) {
        return false;
    }
    // 定义一个对象,
    const hash = {};

    // 遍历字符串s,看每个字符的个数,最后形成
    // hash = { a: 3, n: 1, g: 1, r: 1, m: 1 }
    for (const k of s) {
        hash[k] = hash[k] || 0;
        hash[k] += 1;
    }

    // 然后遍历字符串t
    for (const k of t) {
        // 判断字符串t中的每个字符是否在hash中,不在,则返回false
        if (!hash[k]) {
            return false;
        }
        // 说明匹配成功,把遍历的字符个数减一
        hash[k] -= 1;
    }
    return true;
};

复杂度分析 1

  • 时间复杂度:O(n)

    • 使用了 2 个单层循环,因此,时间复杂度为 。
  • 空间复杂度:O(1)

    • 申请的变量 hash 最大长度为 256,因为 Ascii 字符最多 256 种可能,因此,考虑为常量空间,即 O(1)O(1)

   转载规则


《leetcode-字符串-242-有效的字母异位词》 朝飞 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
leetcode-字符串-8-字符串转整数 leetcode-字符串-8-字符串转整数
8. 字符串转换整数 (atoi)描述 请你来实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下: 如果第一个非空字符为正或者负号时,则
2020-05-16
下一篇 
leetcode-字符串-7-整数反转 leetcode-字符串-7-整数反转
7. 整数反转描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1 输入: 123 输出: 321示例 2 输入: -123 输出: -321示例 3 输入: 120
2020-05-16
  目录