Поиск подстрок - EcsFlash/DataTypes GitHub Wiki

Дана символьная строка длиной n называемая текстом и строка длиной m называемая шаблоном. Требуется найти в тексте подстроку соответствующую шаблону. То есть определить индекс i первого элемента подстроки в исходном тексте.

func FindSubstring(s string, sub string) int {
	for i := 0; i <= len(s)-len(sub); i++ {
		j := 0
		while j < len(sub) && sub[j] == s[i+j] {
			j++
		}
		if j == len(sub) {
			return i
		}
	}
	return -1
}
┌────────────┬───────────────┬────────────────┬──────────────┐
│ Сложность  │ Лучший случай │ Средний случай │ Худший случай│
├────────────┼───────────────┼────────────────┼──────────────┤
│   Время    │     O(m)      │     O(n*m)     │    O(n*m)    │
├────────────┼───────────────┼────────────────┼──────────────┤
│   Память   │     O(1)      │     O(1)       │    O(1)      │
└────────────┴───────────────┴────────────────┴──────────────┘

Анализ

Основная операция - сравнение

image