前端与算法 leetcode 242. 有效的字母异位词


题目描述

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

示例 1:

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

示例 2:

输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。

进阶:

如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

242. 有效的字母异位词

概要

判断异位词的方法很多,可以用哈希表,也可以构建26个字符数组判断,还可以根据每个字符出现的次数排序后判断字符串是否相等

提示

哈希,数组

解析

解法一:哈希表

哈希表在本题中表现一般,但看到这题时往往第一时间就能想到这个办法.构建一个HashMap然后统计s中每个单词出现的次数,随后用这个表去判断第t中所有字符出现的次数,一旦字符出现的次数不相等或者没有这个字符就返回false

解法二:数组判断字符出现次数

构建一个长度为26的数组然后全部填充0,随后s中的s[i]字符出现一次该下标位置的数字就自加一次,t[i]对应的下标自减一次,最后的结果中有一个不为0则表示s和t不相等

解法三:转换字符串

和解法二思路类似,但其实就是排序后判断字符串是否相等

算法

/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function (s, t) {
// 哈希法
// if (s.length !== t.length) {return false;}
// let map = new Map();
// for (let i = 0;i < s.length;i++) {
// map.get(s[i]) === undefined ? map.set(s[i], 1) : map.set(s[i], map.get(s[i]) + 1);
// }
// for (let j = 0;j < t.length;j++) {
// if (map.get(t[j]) > 0) {map.set(t[j], (map.get(t[j])) - 1);} else {return false;}
// }
// return true;
// 26个字符法
if (s.length !== t.length) {return false;}
let kmap = new Array(26).fill(0);
for (let i = 0 ;i < s.length;i++) {
kmap[s[i].charCodeAt(0) - 97]++;
kmap[t[i].charCodeAt(0) - 97]--;
}
for (let i = 0;i < 26;i++) {
if (kmap[i] !== 0) {return false;}
}
return true;
// 解法三
// if (s.length !== t.length) return false
// let o = new Array(26).fill(0)
// for (let i = 0; i < s.length; i++) {
// o[s[i].charCodeAt(0) - 97]++
// }
// let p = new Array(26).fill(0)
// for (let i = 0; i < t.length; i++) {
// p[t[i].charCodeAt(0) - 97]++
// }
// o = o.toString()
// p = p.toString()
// return o === p
};

传入测试用例的运行结果

input:"rat","art"
output:true

执行结果

执行用时 :68 ms, 在所有 javascript 提交中击败了98.28%的用户
内存消耗 :35.7 MB, 在所有 javascript 提交中击败了87.50%的用户

GitHub仓库

242. 有效的字母异位词

前端与算法 leetcode 242. 有效的字母异位词的更多相关文章

  1. LeetCode 242. 有效的字母异位词(Valid Anagram)

    242. 有效的字母异位词 LeetCode242. Valid Anagram 题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s ...

  2. Java实现 LeetCode 242 有效的字母异位词

    242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t = " ...

  3. Leetcode 242.有效的字母异位词 By Python

    给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram" ...

  4. [LeetCode] 242. 有效的字母异位词 valid-anagram(排序)

    注意这里字母异位词的定义是:字母类别及个数都要一样,只是排列顺序不同. class Solution(object): def isAnagram(self, s, t): ""& ...

  5. Leetcode 242.有效的字母异位词(Python3)

    题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram& ...

  6. 【LeetCode】242. 有效的字母异位词

    242. 有效的字母异位词 知识点:字符串:哈希表 题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 注意:若 s 和 t 中每个字符出现的次数都相同,则称  ...

  7. LeetCode初级算法之字符串:242 有效的字母异位词

    有效的字母异位词 题目地址:https://leetcode-cn.com/problems/valid-anagram/ 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位 ...

  8. leetcode No.242 有效的字母异位词 valid-anagram (Python3实现)

    题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram&q ...

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

    1. 具体题目 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 注:判断两个字符串包含的字母是否完全一样. 示例 1: 输入: s = "anagram&q ...

随机推荐

  1. laravel框架之状态更改

    //表单@if($v['sex']==0) <td class="se" ss="{{$v['sex']}}" id="{{$v['id']}} ...

  2. VMware 12 下载+专业版永久序列号

    VMware 12 下载     VMware 12 下载(百度网盘) 链接:https://pan.baidu.com/s/1VvRmjf1yZ2zprQUzuVKRkA 密码:dvpr VMwar ...

  3. Es6学习指南-1-函数变量

    本篇章我们简述的是 es6初级知识点,认识es6,以及es6变量和es5的变量和函数. ECMAScript  6简介 ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代 ...

  4. FFmpeg基础一

    来源:http://blog.csdn.net/chance_yin/article/details/10323441 一.研究数字多媒体,首先要了解几个基本术语(ffmpeg的相关文档几乎都是英文的 ...

  5. java随机数获取

    /**Number One: * 随机数获取公式:(数据类型)(最小值+Math.random()*(最大值-最小值+1)) * 随机数获取公式:(类型)最小值+Math.random()*最大值 * ...

  6. 【SSH错误】ssh_exchange_identification: read: Connection reset by peer

    进行远程登录时,ssh root@xxxxxxxxx出现如下错误 ssh_exchange_identification: read: Connection reset by peer 解决方案:登录 ...

  7. TRACE32 Simulator License

    链接:https://www.lauterbach.com/frames.html?sim_license.html Which Features of the TRACE32 Instruction ...

  8. 201871010110-李华《面向对象程序设计(java)》第6-7周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  9. Win7下安装openssl

    安装环境: 操作系统:window7(64位) C++编译器:VS2012 -------------------------------------------------------------- ...

  10. C#中Equals 与== 的区别

    这个问题听说是大公司面试都会问的问题,以前不怎么了解,好奇心勾引我来研究一下 首先从值类型分析,先写几句简单的代码供测试用,二行语句输出的都是true, 说明==与Equals功能是相同的, 判断的都 ...