From 773bd55e312e40f559f2dfec6a5707605531264b Mon Sep 17 00:00:00 2001 From: Eat-Swap Date: Tue, 31 May 2022 09:27:17 +0800 Subject: [PATCH] add: 220531 [cpp] --- cpp/2205/220531.cpp | 33 +++++++++++++++++++++++++++++++++ cpp/2205/CMakeLists.txt | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 cpp/2205/220531.cpp diff --git a/cpp/2205/220531.cpp b/cpp/2205/220531.cpp new file mode 100644 index 0000000..bb96fad --- /dev/null +++ b/cpp/2205/220531.cpp @@ -0,0 +1,33 @@ +#include +#include + +/** + * 1461. Check If a String Contains All Binary Codes of Size K + * Given a binary string s and an integer k, return true if every binary code of length k is a substring of s. Otherwise, return false. + */ + +class Solution { +public: + static bool hasAllCodes(const std::string& s, int k) { + if (s.length() <= k) + return false; + int cur = 0, cnt = 1, mask = (1 << k) - 1; + for (int i = 0; i < k; ++i) + cur = (cur << 1) | (s[i] & 1); + std::bitset<1 << 20> v; + v.set(cur); + for (int r = k; r < s.length(); ++r) { + cur = ((cur << 1) | (s[r] & 1)) & mask; + if (!v.test(cur)) { + v.set(cur); + ++cnt; + } + } + return cnt == (1 << k); + } +}; + +int main() { + Solution::hasAllCodes("01", 1); + return 0; +} diff --git a/cpp/2205/CMakeLists.txt b/cpp/2205/CMakeLists.txt index c3b55f1..5a058e7 100644 --- a/cpp/2205/CMakeLists.txt +++ b/cpp/2205/CMakeLists.txt @@ -3,4 +3,4 @@ PROJECT(2205) SET(CMAKE_CXX_STANDARD 23) -ADD_EXECUTABLE(2205 220531-CN.cpp) +ADD_EXECUTABLE(2205 220531.cpp)