[JavaScript 刷题] 哈希表 - 检查一个字符串是否包含所有长度为 K 的二进制子串, leetcode 1461
Posted GoldenaArcher
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JavaScript 刷题] 哈希表 - 检查一个字符串是否包含所有长度为 K 的二进制子串, leetcode 1461相关的知识,希望对你有一定的参考价值。
[javascript 刷题] 哈希表 - 检查一个字符串是否包含所有长度为 K 的二进制子串, leetcode 1461
github repo 地址: https://github.com/GoldenaArcher/js_leetcode,Github 的目录 大概 会更新的更勤快一些。
题目地址:1461. Check If a String Contains All Binary Codes of Size K
题目
如下:
Given a binary string
s
and an integerk
, returntrue
if every binary code of lengthk
is a substring ofs
. Otherwise, returnfalse
.
解题思路
暴力解是肯定会超时的……
之前还看到一个解法,是使用 bit comparison 去解的,不过那个解法没太看懂,这里就提一下,希望有理解的大佬不吝赐教。
这里做法就是使用 Set 去做,题目中给的 hint 其实已经很明显了,只不过一下子没转过来:
-
We need only to check all sub-strings of length k.
只需要查找长度为 k 的子字符串
-
The number of distinct sub-strings should be exactly 2^k.
独特的子字符串的数量为 2^k 个
这道题就是这么理解的,以 k=2 为例,可以组成的字符串类型有:
- 00
- 01
- 10
- 11
这里就对应了 独特的子字符串的数量为 2^k 个
,提示 1 也就变得非常明显了,鉴于题目中说数组中只会包含 0 或 1,那么只需要使用 Set 去保存所有长度为 2 的字符串,最后判断 Set 的长度与 独特的子字符串的数量为 2^k 个
是否相等即可。
使用 JavaScript 解题
/**
* @param string s
* @param number k
* @return boolean
*/
var hasAllCodes = function (s, k)
const set = new Set();
for (let i = 0; i < s.length - k + 1; i++)
set.add(s.substring(i, i + k));
return set.size === Math.pow(2, k);
;
以上是关于[JavaScript 刷题] 哈希表 - 检查一个字符串是否包含所有长度为 K 的二进制子串, leetcode 1461的主要内容,如果未能解决你的问题,请参考以下文章
[JavaScript 刷题] 哈希表 - 两个数组的交集 II,leetcode 350
[JavaScript 刷题] 哈希表 - 存在重复元素, leetcode 217
[JavaScript 刷题] 哈希表 - 日志速率限制器, leetcode 359
[JavaScript 刷题] 哈希表 - 和为 K 的子数组, leetcode 560