diff options
author | crupest <crupest@outlook.com> | 2021-02-27 21:29:07 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-02-27 21:29:07 +0800 |
commit | 41dbcca9407162c0a9fd58c5f912edb440471460 (patch) | |
tree | a17417111e81310da08068c37a8ad247a8d69179 | |
parent | 5f0f4b76373db9dda9b9b8855339614dacc9c3b3 (diff) | |
download | crupest-41dbcca9407162c0a9fd58c5f912edb440471460.tar.gz crupest-41dbcca9407162c0a9fd58c5f912edb440471460.tar.bz2 crupest-41dbcca9407162c0a9fd58c5f912edb440471460.zip |
import(solutions): Add leetcode 395.
-rw-r--r-- | works/solutions/leetcode/cpp/395.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
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 <array>
+#include <string>
+
+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<int, 26> 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;
+}
|