專欄: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 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
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算法文檔 。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.