From 7a4d6b2544010d5a588fcb641cd900f10102654f Mon Sep 17 00:00:00 2001 From: vakhokoto Date: Sat, 11 Jul 2020 00:58:58 +0400 Subject: [PATCH 1/2] z function added --- Strings/ZFunction.java | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Strings/ZFunction.java diff --git a/Strings/ZFunction.java b/Strings/ZFunction.java new file mode 100644 index 000000000000..9872f26beff7 --- /dev/null +++ b/Strings/ZFunction.java @@ -0,0 +1,29 @@ +package Strings; + +public class ZFunction { + private String s; + + public ZFunction(String s){ + this.s = s; + } + + public int[] getArray(){ + int length = s.length(); + int[] z = new int[length]; + int l = 0, r = 0; + for (int i=0; i l && i <= r){ + z[i] = Math.min(z[i - l], r - i + 1); + } + while (i + z[i] < length && s.charAt(z[i]) == s.charAt(i + z[i])){ + z[i]++; + } + if (i + z[i] > r){ + l = i; + r = i + z[i] - 1; + } + } + + return z; + } +} From a983a15b62c0f98b626c6ebc194ecbf950aa369a Mon Sep 17 00:00:00 2001 From: vakhokoto Date: Wed, 22 Jul 2020 12:52:54 +0400 Subject: [PATCH 2/2] description added and also link to the algorithm review --- Strings/ZFunction.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Strings/ZFunction.java b/Strings/ZFunction.java index 9872f26beff7..f9ca97d6b24d 100644 --- a/Strings/ZFunction.java +++ b/Strings/ZFunction.java @@ -1,21 +1,25 @@ +// Initialisation of strings algorithm Z function +// detailed review and proper examples can be seen on the link bewlow +// +// Link of algorithm review: https://www.geeksforgeeks.org/z-algorithm-linear-time-pattern-searching-algorithm/ package Strings; public class ZFunction { - private String s; + private String string; - public ZFunction(String s){ - this.s = s; + public ZFunction(String string){ + this.string = string; } public int[] getArray(){ - int length = s.length(); + int length = string.length(); int[] z = new int[length]; int l = 0, r = 0; for (int i=0; i l && i <= r){ z[i] = Math.min(z[i - l], r - i + 1); } - while (i + z[i] < length && s.charAt(z[i]) == s.charAt(i + z[i])){ + while (i + z[i] < length && string.charAt(z[i]) == string.charAt(i + z[i])){ z[i]++; } if (i + z[i] > r){