LeetCode-242.有效的字母异位词(三十七)

有效的字母异位词

一、LeetCode题解

瞧一瞧~

二、算法题

题目

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

示例 1:

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

示例2

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

你可以假设字符串只包含小写字母。

解法一(暴力删除)

  • 为了方便删除,将字符串转换成数组
  • 一一查找两个数组的元素,有相等的就删除
  • 如果满足题需求,则数组长度以应为0
代码
var isAnagram = function(s, t) {
    if(s.length !== t.length) return false;
    var arrS = s.split('')
    var arrT = t.split('')
    for(let i = 0; i < arrS.length; i++){
        let index = arrT.indexOf(arrS[i])
        if(index !== -1){
            arrS.splice(i, 1)
            arrT.splice(index, 1)
            i--
        }
    }
    return arrS.length == 0
};

解法二 (排序)

  • 利用ascii码排序
  • 比较两个字符串是否相等
  • 我们利用快排的话时间负责度应该是 O(n*logn)
  • PS:这里我没有使用快排,所以也不是排序最优解
代码
var isAnagram = function(s, t) {
    if(s.length !== t.length) return false;
    var arrS = s.split('').sort()
    var arrT = t.split('').sort()
    for(let i = 0; i < arrS.length; i++){
        if(arrS[i] != arrT[i])
        return false
    }
    return true
};
结果

在这里插入图片描述

解法三 (Map)

  • 对每一个字符串进行map的建立,读取每一种字母出现的次数
  • 循环比较两个Map的key对应的次数是否相等
代码
var isAnagram = function(s, t) {
    if(s.length !== t.length) return false;
    var objS = {},objT = {}
    for(let i = 0; i < s.length; i++){
        if(objS[s[i]]){
            objS[s[i]] += 1
        }else{
            objS[s[i]] = 1
        }
        if(objT[t[i]]){
            objT[t[i]] += 1
        }else{
            objT[t[i]] = 1
        }
    }
    for(let key in objS){
        if(objS[key] != objT[key])  return false
    }
    return true
};
结果

在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页