implementacji z pętlami
chcesz to raz sprawdzić, czy sprawdzać wiele razy?
bo jak chcesz raz sprawdzić, to raczej i tak będziesz potrzebować conajmniej jednej pętli (później można porobić jakiś indeks, ale na początku to jak sobie poradzić bez co najmniej jednej pętli?)
odpowiedzi które znajdują byle jaką implementacje która "gets the job done" - mogę ją sam napisać
no mi się nasuwają dwie implementacje tego typu, które są dość proste (ale czy muszą być jakoś wielce skomplikowane? Jaki jest twój dokładny usecase? )
Jedna "na pałę", czyli iterujemy przez znaki w stringu i sprawdzamy czy podstring zaczynający się od aktualnego znaku się zgadza z szukaną frazą:
(pseudokod)
for index in string
for phrase in phrases
if substring(string, index, length(phrase)) == phrase)
return index
tylko tu mamy problem, że dla każdego znaku trzeba generować podstring (pytanie, jaki to jest rzeczywisty narzut?)
Inne rozwiązanie, jakie mi się nasuwa to iterować po znakach, ale nie sprawdzać podstringu, tylko przelatywać przez szukane frazy i sprawdzać, czy pierwszy znak się zgadza. Jeśli tak, to zinkrementować indeks znaku dla danej frazy. I przy kolejnych znakach sprawdzać czy znak równa się n-ty znak w danej frazie. Jeśli tak, to inkrementujemy (aż znajdziemy wszystkie znaki danej frazy), jeśli nie, to dla danej frazy wracamy do początku:
for character, index in string
for phraseInfo in phraseInfos
if phraseInfo.phrase[phraseInfo.index] == character
phraseInfo.index += 1
if phraseInfo.index == length(phraseInfo.phrase)
return index // znalezione!
else
phraseInfo.index = 0 // zerujemy indeks, poniewaz znaki sie nie zgadzaja