|
|
|
@ -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<unsigned int> random_ascii_char(97, 122); // a-z
|
|
|
|
|
random_number_generator<unsigned int> 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);
|
|
|
|
|