Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function getZ(string) {
- const Z = new Array(string.length).fill(0);
- const lastIndex = string.length - 1; // сократить строку в while
- let l = 0, r = 0;
- for (let i = 1; i <= string.length - 1; i++) {
- // Используем уже собранную информацию, чтобы вычислить значения z для уже посещенных элементов.
- if (i <= r)
- Z[i] = Math.min(r - i + 1, Z[i - l]);
- while (
- i + Z[i] <= lastIndex
- && string[Z[i]] == string[i + Z[i]])
- Z[i]++;
- // обновляем значения r и l, если мы ушли вправо дальше текущей r
- if (i + Z[i] - 1 > r) {
- r = i + Z[i] - 1;
- l = i;
- }
- }
- return Z;
- }
Add Comment
Please, Sign In to add comment