当前位置: 首页 > news >正文

【Leetcode 2399 】 检查相同字母间的距离 —— 哈希表

给你一个下标从 0 开始的字符串 s ,该字符串仅由小写英文字母组成,s 中的每个字母都 恰好 出现 两次 。另给你一个下标从 0 开始、长度为 26 的的整数数组 distance 。

字母表中的每个字母按从 0 到 25 依次编号(即,'a' -> 0'b' -> 1'c' -> 2, ... , 'z' -> 25)。

在一个 匀整 字符串中,第 i 个字母的两次出现之间的字母数量是 distance[i] 。如果第 i 个字母没有在 s 中出现,那么 distance[i] 可以 忽略 。

如果 s 是一个 匀整 字符串,返回 true ;否则,返回 false 。

示例 1:

输入:s = "abaccb", distance = [1,3,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
输出:true
解释:
- 'a' 在下标 0 和下标 2 处出现,所以满足 distance[0] = 1 。
- 'b' 在下标 1 和下标 5 处出现,所以满足 distance[1] = 3 。
- 'c' 在下标 3 和下标 4 处出现,所以满足 distance[2] = 0 。
注意 distance[3] = 5 ,但是由于 'd' 没有在 s 中出现,可以忽略。
因为 s 是一个匀整字符串,返回 true 。

示例 2:

输入:s = "aa", distance = [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
输出:false
解释:
- 'a' 在下标 0 和 1 处出现,所以两次出现之间的字母数量为 0 。
但是 distance[0] = 1 ,s 不是一个匀整字符串。

提示:

  • 2 <= s.length <= 52
  • s 仅由小写英文字母组成
  • s 中的每个字母恰好出现两次
  • distance.length == 26
  • 0 <= distance[i] <= 50

哈希表

/*
https://leetcode.cn/u/cshappyeveryday/
执行用时:72 ms, 在所有 Typescript 提交中击败了 100.00 %的用户
内存消耗:52.8 MB, 在所有 Typescript 提交中击败了 100.00 %的用户
时间复杂度:O(n) , 空间复杂度: O(n)
2024年9月3日 
*/
function checkDistances(s: string, distance: number[]): boolean {const diff = new Map<string, number>();const OFFSET = "a".charCodeAt(0);for (let i = 0; i < s.length; i++) {diff.has(s[i])? diff.set(s[i], i - diff.get(s[i])! - 1): diff.set(s[i], i);}for (const [k, v] of diff) {if (distance[k.charCodeAt(0) - OFFSET] !== v) return false;}return true;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 2024国赛数学建模备赛|30种常用的算法模型之最优算法,线性规划
  • 服务器文件权限限制写入
  • 【Google SEO】SEO 面试问题和答案
  • uniapp去除顶部标题栏
  • 怎么摆脱非自然链接?
  • 虚拟化pve查看存储空间使用情况
  • ML17_变分推断01:KL散度、ELBO
  • pvesm list 命令使用
  • 单向链表的操作
  • 并发高负载场景下的负载均衡优化方案
  • 心觉:如何填平想象和愿望之间的鸿沟?
  • HTTP 请求方法(method)介绍
  • 深度学习(DL)算法分分类
  • nacos适配人大金仓以及达梦-2.41
  • Golang | Leetcode Golang题解之第384题打乱数组
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 11111111
  • 230. Kth Smallest Element in a BST
  • canvas 高仿 Apple Watch 表盘
  • EventListener原理
  • gitlab-ci配置详解(一)
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • js继承的实现方法
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • k个最大的数及变种小结
  • Linux链接文件
  • PhantomJS 安装
  • 包装类对象
  • 从零开始在ubuntu上搭建node开发环境
  • 动态规划入门(以爬楼梯为例)
  • 服务器从安装到部署全过程(二)
  • 前端设计模式
  • 区块链技术特点之去中心化特性
  • 使用Swoole加速Laravel(正式环境中)
  • 收藏好这篇,别再只说“数据劫持”了
  • 为什么要用IPython/Jupyter?
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 白色的风信子
  • puppet连载22:define用法
  • 积累各种好的链接
  • 组复制官方翻译九、Group Replication Technical Details
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • # Apache SeaTunnel 究竟是什么?
  • ### RabbitMQ五种工作模式:
  • #if和#ifdef区别
  • #pragma data_seg 共享数据区(转)
  • (003)SlickEdit Unity的补全
  • (1)(1.9) MSP (version 4.2)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (论文阅读40-45)图像描述1
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (四十一)大数据实战——spark的yarn模式生产环境部署