From 2e6e451f99cd75442098e4e43a7da4b1b22500c0 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 31 Jul 2023 09:57:13 -0600 Subject: [PATCH 1/4] golf --- content/strings/Zfunc.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/content/strings/Zfunc.h b/content/strings/Zfunc.h index 2b86f37b3..3af24964c 100644 --- a/content/strings/Zfunc.h +++ b/content/strings/Zfunc.h @@ -13,9 +13,7 @@ vi Z(const string& S) { rep(i,1,sz(S)) { z[i] = i >= r ? 0 : min(r - i, z[i - l]); while (i + z[i] < sz(S) && S[i + z[i]] == S[z[i]]) - z[i]++; - if (i + z[i] > r) - l = i, r = i + z[i]; + z[i]++, l = i, r = i + z[i]; } return z; } From 5428946c934451853586a58af99d7ade31350a64 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Tue, 1 Aug 2023 15:21:31 -0600 Subject: [PATCH 2/4] save another character --- content/strings/Zfunc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/strings/Zfunc.h b/content/strings/Zfunc.h index 3af24964c..ed79765d4 100644 --- a/content/strings/Zfunc.h +++ b/content/strings/Zfunc.h @@ -11,7 +11,7 @@ vi Z(const string& S) { vi z(sz(S)); int l = -1, r = -1; rep(i,1,sz(S)) { - z[i] = i >= r ? 0 : min(r - i, z[i - l]); + z[i] = i > r ? 0 : min(r - i, z[i - l]); while (i + z[i] < sz(S) && S[i + z[i]] == S[z[i]]) z[i]++, l = i, r = i + z[i]; } From 3f4e790b7f3fc6ede0340a8c1854b7214d0f10bd Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Tue, 1 Aug 2023 15:36:00 -0600 Subject: [PATCH 3/4] another golf idea --- content/strings/Zfunc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/strings/Zfunc.h b/content/strings/Zfunc.h index ed79765d4..01dfdc625 100644 --- a/content/strings/Zfunc.h +++ b/content/strings/Zfunc.h @@ -11,7 +11,7 @@ vi Z(const string& S) { vi z(sz(S)); int l = -1, r = -1; rep(i,1,sz(S)) { - z[i] = i > r ? 0 : min(r - i, z[i - l]); + z[i] = min(max(r - i, 0), z[i - l]); while (i + z[i] < sz(S) && S[i + z[i]] == S[z[i]]) z[i]++, l = i, r = i + z[i]; } From 0d3d75bc575db032775282775737920408b61c93 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Tue, 1 Aug 2023 15:45:59 -0600 Subject: [PATCH 4/4] previous version indexes out of bounds on "aa" --- content/strings/Zfunc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/strings/Zfunc.h b/content/strings/Zfunc.h index 01dfdc625..74b320004 100644 --- a/content/strings/Zfunc.h +++ b/content/strings/Zfunc.h @@ -9,7 +9,7 @@ vi Z(const string& S) { vi z(sz(S)); - int l = -1, r = -1; + int l = 0, r = 0; rep(i,1,sz(S)) { z[i] = min(max(r - i, 0), z[i - l]); while (i + z[i] < sz(S) && S[i + z[i]] == S[z[i]])