分享

腾讯启动史上最大规模招聘,力度空前。。

 数据结构和算法 2025-04-18 发布于上海

精品推荐

《征服数据结构》专栏: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 。

示例1:

输入:s = "00110110", k = 2

输出:true

解释:长度为 2 的二进制串包括 "00","01","10" 和 "11"。它们分别是 s 中下标为 0,1,3,2 开始的长度为 2 的子串。

示例2:

输入:s = "0110", k = 2

输出:false

解释:长度为 2 的二进制串 "00" 没有出现在 s 中。


  • 1 <= s.length <= 5 * 10^5

  • s[i] 不是'0' 就是 '1'

  • 1 <= k <= 20


问题分析



这题让判断字符串是否包含所有长度为 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。

JAVA:
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;
}

C++:
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算法文档

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多