精品推荐:
《征服数据结构》专栏:50多种数据结构彻底征服 《经典图论算法》专栏:50多种经典图论算法全部掌握 2025年4月17号腾讯发文称:腾讯开启史上最大就业计划,三年新增28000校招岗位。平均一年新增9000多人,其中光2025年,就将迎来10000名校招实习生。 腾讯的这次校招实习岗位涵盖技术、产品、设计、市场、职能等五大类70余种岗位,包括大模型、研发、算法、市场、策划、运营、销售、美术等多个岗位职能。 其中技术类岗位「扩招」力度空前,占比超60%。截止今年3月腾讯正式员工人数超55000人,其中科技类人才超过40000人,占比高达73%,这其中,直接从事技术研发工作的员工超27000人,占整体员工人数的近半比例。 --------------下面是今天的算法题-------------- 来看下今天的算法题,这题是LeetCode的第1461题:检查一个字符串是否包含所有长度为 K 的二进制子串,难度是中等。 给你一个二进制字符串 s 和一个整数 k 。如果所有长度为 k 的二进制字符串都是 s 的子串,请返回 true ,否则请返回 false 。输入:s = "00110110", k = 2 输出:true 解释:长度为 2 的二进制串包括 "00","01","10" 和 "11"。它们分别是 s 中下标为 0,1,3,2 开始的长度为 2 的子串。
输入:s = "0110", k = 2 输出:false 解释:长度为 2 的二进制串 "00" 没有出现在 s 中。 这题让判断字符串是否包含所有长度为 k 的二进制字符串,长度为 k 的二进制字符串总共有 2^k 个,比如长度为 1 的二进制字符串总共有 2 个,长度为 3 的字符串总共有 8 个,分别是[000,001,010,011,100,101,110,111]。这题我们可以截取所有长度为 k 的字符串,保存到 set 中,因为 set 是去重的,如果有重复的只会保存一个,最后在判断 set 中元素的个数是否等于 2^k 。如果等于,说明包含所有长度为 k 的二进制字符串,返回true。如果不等于,说明少了,返回false。public boolean hasAllCodes(String s, int k) { Set<String> st = new HashSet<>(); for (int i = 0, n = s.length(); i <= n - k; i++) st.add(s.substring(i, i + k)); return st.size() == 1 << k; }
public: bool hasAllCodes(string s, int k) { unordered_set<string> st; for (int i = 0, n = s.length(); i <= n - k; i++) st.insert(s.substr(i, k)); return st.size() == 1 << k; }
博哥,真名:王一博,毕业十多年,《算法秘籍》作者,专注于数据结构和算法的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以下载我整理的1000多页的PDF算法文档。
|