From f5582682e9d74e81d4a1454c71135c858e5f8688 Mon Sep 17 00:00:00 2001 From: Manish Date: Sat, 25 Feb 2023 12:28:15 +1100 Subject: [PATCH] fix: do not find substring with length 1 and print test case after updating result --- 1_longest_substring_with_k_distinct_characters.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/1_longest_substring_with_k_distinct_characters.cpp b/1_longest_substring_with_k_distinct_characters.cpp index 580dcec..c5bb10c 100644 --- a/1_longest_substring_with_k_distinct_characters.cpp +++ b/1_longest_substring_with_k_distinct_characters.cpp @@ -107,7 +107,8 @@ result find(const std::string &s, const unsigned long k) { start++; } if (char_count.size() == k && - end - start > r.longest_end - r.longest_start) { + (end - start > r.longest_end - r.longest_start || + r.match_found == false)) { r.longest_start = start, r.longest_end = end; r.match_found = true; } @@ -170,30 +171,30 @@ int main(int argc, char *argv[]) { << std::endl; random_number_generator random_ascii_char(97, 122); // a-z random_number_generator rng; - for (unsigned int i = 0; i < 1; i++) { + for (unsigned int i = 0; i < 10; i++) { test_case t; t.i.s += (char)random_ascii_char(); - std::cout << t; t.r = find(t.i.s, t.i.k); + std::cout << t; for (unsigned int j = 0; j < 10; j++) { for (unsigned int k = 0, increase_str_len_by = rng(100, 1000); k < increase_str_len_by; k++) { t.i.s += (char)random_ascii_char(); - std::cout << t; result r = find(t.i.s, t.i.k); if (r.match_found && t.r.match_found) assert(r.longest_end - r.longest_start >= t.r.longest_end - t.r.longest_start); t.r = r; + std::cout << t; assert(K_verify(t)); } while (t.r.match_found) { - std::cout << t; result r = find(t.i.s, ++t.i.k); if (r.match_found) assert(r.longest_end - r.longest_start >= t.r.longest_end - t.r.longest_start); t.r = r; + std::cout << t; assert(K_verify(t)); } t.i.k = rng(1, --t.i.k);