From 641ead1acda087826b52f35884c19e9cf52a9971 Mon Sep 17 00:00:00 2001 From: crupest Date: Sat, 27 Feb 2021 21:29:07 +0800 Subject: import(solutions): Add leetcode 395. --- works/solutions/leetcode/cpp/395.cpp | 56 ++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 works/solutions/leetcode/cpp/395.cpp (limited to 'works/solutions/leetcode/cpp/395.cpp') diff --git a/works/solutions/leetcode/cpp/395.cpp b/works/solutions/leetcode/cpp/395.cpp new file mode 100644 index 0000000..d45eee9 --- /dev/null +++ b/works/solutions/leetcode/cpp/395.cpp @@ -0,0 +1,56 @@ +#include +#include + +using std::string; + +class Solution { +public: + static int dfs(const std::string &s, int start, int end, int k) { + if (end - start < k) { + return 0; + } + + std::array counts{0}; + + for (int i = start; i < end; i++) { + counts[s[i] - 'a']++; + } + + int max = -1; + + for (char c = 'a'; c <= 'z'; c++) { + int count = counts[c - 'a']; + + if (count > 0 && count < k) { + int sub_start = start; + + for (int i = start; i < end; i++) { + if (s[i] == c) { + if (sub_start != i) { + max = std::max(dfs(s, sub_start, i, k), max); + } + sub_start = i + 1; + } + } + + if (sub_start != end) { + max = std::max(dfs(s, sub_start, end, k), max); + } + + break; // This is vital. + } + } + + if (max == -1) + return end - start; + else + return max; + } + + int longestSubstring(string s, int k) { return dfs(s, 0, s.size(), k); } +}; + +int main() { + Solution{}.longestSubstring("aaaaaaaaaaaabcdefghijklmnopqrstuvwzyz", 3); + return 0; +} -- cgit v1.2.3