LeetCode - 205 - 同构字符串(isomorphic-strings)

栏目: IT技术 · 发布时间: 5年前

内容简介:LeetCode - 205 - 同构字符串(isomorphic-strings)

Create by jsliang on 2019-07-12 18:40:54
Recently revised in 2019-07-12 19:29:09

一 目录

不折腾的前端,和咸鱼有什么区别

| 目录 | | --- | | 一 目录 | | 二 前言 | | 三 解题 | |  3.1 解法 - Map() | |  3.2 解法 - indexOf() |

二 前言

  • 难度:简单

  • 涉及知识:哈希表

  • 题目地址:https://leetcode-cn.com/problems/isomorphic-strings/

  • 题目内容

  1. 给定两个字符串 s  t,判断它们是否是同构的。

  2. 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。

  3. 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。

  4. 两个字符不能映射到同一个字符上,但字符可以映射自己本身。

  5. 示例 1:

  6. 输入: s = "egg", t = "add"

  7. 输出: true

  8. 示例 2:

  9. 输入: s = "foo", t = "bar"

  10. 输出: false

  11. 示例 3:

  12. 输入: s = "paper", t = "title"

  13. 输出: true

  14. 说明:

  15. 你可以假设 s  t 具有相同的长度。

三 解题

小伙伴可以先自己在本地尝试解题,再回来看看 jsliang 的解题思路。

3.1 解法 - Map()

  • 解题代码

  1. var isIsomorphic = function(s, t) {

  2. let sMap = new Map(); // 记录 s 哈希表

  3. let tMap = new Map(); // 记录 t 哈希表

  4. let sFlag = 0;

  5. let tFlag = 0;

  6. for (let i = 0; i < s.length; i++) {

  7. if (sMap.get(s[i])) {

  8. s[i] = sMap.get(s[i]);

  9. } else {

  10. sFlag++;

  11. sMap.set(s[i], sFlag);

  12. s[i] = sFlag;

  13. }

  14. if (tMap.get(t[i])) {

  15. t[i] = tMap.get(t[i]);

  16. } else {

  17. tFlag++;

  18. tMap.set(t[i], tFlag);

  19. t[i] = tFlag;

  20. }

  21. if (sMap.get(s[i]) !== tMap.get(t[i])) {

  22. return false;

  23. }

  24. }

  25. return true;

  26. };

  • 执行测试

  1. s: ab

  2. t: ac

  3. return: true

  • LeetCode Submit

  1. Accepted

  2. 30/30 cases passed (116 ms)

  3. Your runtime beats 44.62 % of javascript submissions

  4. Your memory usage beats 17.35 % of javascript submissions (39.8 MB)

  • 知识点

  1. map():遍历数组, item 返回遍历项, index 返回当前索引。 map() 详细介绍

  • 解题思路

最愚蠢的就是老想着奇技淫巧

首先,我们分两个 Map() 记录哈希表(如果只有一个 Map(),碰到 abac 这种组合的时候会挂),使用 sFlagtFlag 来表示这个字符是否重复出现。

然后,我们判断 sMap()tMap() 是否有已经出现的字符串,如果出现,则直接设置值;如果没出现,则先设置下 Map() 值,再设置下这个位置的值。

最后,判断这两个值是否相同,相同则是 true,否则是 false

3.2 解法 - indexOf()

  • 解题代码

  1. var isIsomorphic = function(s, t) {

  2. for (let i = 0; i < s.length; i++) {

  3. if (s.indexOf(s[i]) !== t.indexOf(t[i])) {

  4. return false;

  5. }

  6. }

  7. return true;

  8. };

  • 执行测试

  1. s: ab

  2. t: ac

  3. return: true

  • LeetCode Submit

  1. Accepted

  2. 30/30 cases passed (84 ms)

  3. Your runtime beats 93.08 % of javascript submissions

  4. Your memory usage beats 92.86 % of javascript submissions (35 MB)

  • 知识点

  1. indexOf():判断数组中是否存在判断条件中的值。如果存在,则返回第一次出现的索引;如果不存在,则返回 -1。 indexOf() 详细介绍

  • 解题思路

人比人,气死人

大佬思想:因为 indexOf 会返回遍历这个字符串的遇到一个第一个指定值的下标,所以判断两个下标是否一样即可。


不折腾的前端,和咸鱼有什么区别!

LeetCode - 205 - 同构字符串(isomorphic-strings)

jsliang 会每天更新一道 LeetCode 题解,从而帮助小伙伴们夯实原生 JS 基础,了解与学习算法与数据结构。

扫描上方二维码,关注 jsliang 的公众号,让我们一起折腾!

LeetCode - 205 - 同构字符串(isomorphic-strings)

jsliang 的文档库 由 梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于https://github.com/LiangJunrong/document-library上的作品创作。
本许可协议授权之外的使用权限可以从 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 处获得。



以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java编程思想 (第4版)

Java编程思想 (第4版)

[美] Bruce Eckel / 陈昊鹏 / 机械工业出版社 / 2007-6 / 108.00元

本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形。从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),本书都能逐步指导你轻松掌握。 从本书获得的各项大奖以及来自世界各地的读者评论中,不难看出这是一本经典之作。本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到......一起来看看 《Java编程思想 (第4版)》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换