Ciągłe przepisywanie znaków w stringu jest czasochłonne np ta funkcja
co ona robi? . Przekazujesz jej stringa (funkcja tworzy kopię) i int ileZankow (którego potem nie używasz), a następnie przepisuje stringa kolejny raz bez ostatniego znaku i zwraca.
Całą funkcję można zastąpić kasowaniem ostatniego znaku, zamień linię:
na: obecnyPrefiks.erase(obecnyPrefiks.size()-1,1);
efekt ten sam, dzała bardzo szybko.
Możliwe że dla krótkich stringów twój program przechodzi, a dla np 1000000 znaków masz przekroczenie czasu.