Блог пользователя dlda

Автор dlda, 10 лет назад, По-русски

Не могу понять почему эта строка j = pi[j-1]; в префикс-функции дает нам правильную позицию.

Об'ясните пожалуста почему это работает =)

Код с e-maxx.ru:

vector<int> prefix_function (string s) {
	int n = (int) s.length();
	vector<int> pi (n);
	for (int i=1; i<n; ++i) {
		int j = pi[i-1];
		while (j > 0 && s[i] != s[j])
			j = pi[j-1];
		if (s[i] == s[j])  ++j;
		pi[i] = j;
	}
	return pi;
}

Полный текст и комментарии »

  • Проголосовать: нравится
  • +8
  • Проголосовать: не нравится