From 78a9c4004697c86b88e64668c560072e75bf68dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20L=C3=B3pez=20N=C3=BA=C3=B1ez?= Date: Sun, 8 Jun 2025 17:52:30 +0200 Subject: [PATCH 01/17] Add Boyer-Moore string search algorithm --- .../thealgorithms/searches/BoyerMoore.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/main/java/com/thealgorithms/searches/BoyerMoore.java diff --git a/src/main/java/com/thealgorithms/searches/BoyerMoore.java b/src/main/java/com/thealgorithms/searches/BoyerMoore.java new file mode 100644 index 000000000000..cd25cb3fe133 --- /dev/null +++ b/src/main/java/com/thealgorithms/searches/BoyerMoore.java @@ -0,0 +1,48 @@ +package com.thealgorithms.searches; + +/** + * Boyer-Moore string search algorithm + * Efficient algorithm for substring search. + * + * @author Pau +*/ + +public class BoyerMoore { + + private final int R; + private int[] right; + private String pattern; + + public BoyerMoore(String pat) { + this.pattern = pat; + this.R = 256; + this.right = new int[R]; + for (int c = 0; c < R; c++) + right[c] = -1; + for (int j = 0; j < pat.length(); j++) + right[pat.charAt(j)] = j; + } + + public int search(String text) { + int m = pattern.length(); + int n = text.length(); + int skip; + + for (int i = 0; i <= n - m; i += skip) { + skip = 0; + for (int j = m - 1; j >= 0; j--) { + if (pattern.charAt(j) != text.charAt(i + j)) { + skip = Math.max(1, j - right[text.charAt(i + j)]); + break; + } + } + if (skip == 0) + return i; + } + return -1; + } + + public static int search(String text, String pattern) { + return new BoyerMoore(pattern).search(text); + } +} From 12cf5be807a790a80fb0c4fa53d911986f43ce81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20L=C3=B3pez=20N=C3=BA=C3=B1ez?= Date: Sun, 8 Jun 2025 17:53:50 +0200 Subject: [PATCH 02/17] Add Boyer-Moore JUnit tests --- BoyerMooreTest.java | 55 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 BoyerMooreTest.java diff --git a/BoyerMooreTest.java b/BoyerMooreTest.java new file mode 100644 index 000000000000..6edb70d71062 --- /dev/null +++ b/BoyerMooreTest.java @@ -0,0 +1,55 @@ +package com.thealgorithms.searches; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; + +public class BoyerMooreTest { + + @Test + public void testPatternFound() { + BoyerMoore bm = new BoyerMoore("ABCDABD"); + String text = "ABC ABCDAB ABCDABCDABDE"; + int index = bm.search(text); + assertEquals(15, index); + } + + @Test + public void testPatternNotFound() { + BoyerMoore bm = new BoyerMoore("XYZ"); + String text = "ABC ABCDAB ABCDABCDABDE"; + int index = bm.search(text); + assertEquals(-1, index); + } + + @Test + public void testPatternAtBeginning() { + BoyerMoore bm = new BoyerMoore("ABC"); + String text = "ABCDEF"; + int index = bm.search(text); + assertEquals(0, index); + } + + @Test + public void testPatternAtEnd() { + BoyerMoore bm = new BoyerMoore("CDE"); + String text = "ABCDEFGCDE"; + int index = bm.search(text); + assertEquals(2, index); + } + + + @Test + public void testEmptyPattern() { + BoyerMoore bm = new BoyerMoore(""); + String text = "Hello world"; + int index = bm.search(text); + assertEquals(0, index); + } + + @Test + public void testStaticSearchMethod() { + int index = BoyerMoore.search("ABCDEFGCDE", "CDE"); + assertEquals(2, index); + } + +} From 4553e6813f63267ce9530301ab4bde08d97479de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20L=C3=B3pez=20N=C3=BA=C3=B1ez?= Date: Sun, 8 Jun 2025 17:57:44 +0200 Subject: [PATCH 03/17] Delete BoyerMooreTest.java --- BoyerMooreTest.java | 55 --------------------------------------------- 1 file changed, 55 deletions(-) delete mode 100644 BoyerMooreTest.java diff --git a/BoyerMooreTest.java b/BoyerMooreTest.java deleted file mode 100644 index 6edb70d71062..000000000000 --- a/BoyerMooreTest.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.thealgorithms.searches; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; - -public class BoyerMooreTest { - - @Test - public void testPatternFound() { - BoyerMoore bm = new BoyerMoore("ABCDABD"); - String text = "ABC ABCDAB ABCDABCDABDE"; - int index = bm.search(text); - assertEquals(15, index); - } - - @Test - public void testPatternNotFound() { - BoyerMoore bm = new BoyerMoore("XYZ"); - String text = "ABC ABCDAB ABCDABCDABDE"; - int index = bm.search(text); - assertEquals(-1, index); - } - - @Test - public void testPatternAtBeginning() { - BoyerMoore bm = new BoyerMoore("ABC"); - String text = "ABCDEF"; - int index = bm.search(text); - assertEquals(0, index); - } - - @Test - public void testPatternAtEnd() { - BoyerMoore bm = new BoyerMoore("CDE"); - String text = "ABCDEFGCDE"; - int index = bm.search(text); - assertEquals(2, index); - } - - - @Test - public void testEmptyPattern() { - BoyerMoore bm = new BoyerMoore(""); - String text = "Hello world"; - int index = bm.search(text); - assertEquals(0, index); - } - - @Test - public void testStaticSearchMethod() { - int index = BoyerMoore.search("ABCDEFGCDE", "CDE"); - assertEquals(2, index); - } - -} From b20e5c09a340a77ff40d61631ed38e9af7ea5944 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20L=C3=B3pez=20N=C3=BA=C3=B1ez?= Date: Sun, 8 Jun 2025 18:00:19 +0200 Subject: [PATCH 04/17] Add JUnit test BoyerMooreTest.java --- .../searches/BoyerMooreTest.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/test/java/com/thealgorithms/searches/BoyerMooreTest.java diff --git a/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java b/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java new file mode 100644 index 000000000000..6edb70d71062 --- /dev/null +++ b/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java @@ -0,0 +1,55 @@ +package com.thealgorithms.searches; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; + +public class BoyerMooreTest { + + @Test + public void testPatternFound() { + BoyerMoore bm = new BoyerMoore("ABCDABD"); + String text = "ABC ABCDAB ABCDABCDABDE"; + int index = bm.search(text); + assertEquals(15, index); + } + + @Test + public void testPatternNotFound() { + BoyerMoore bm = new BoyerMoore("XYZ"); + String text = "ABC ABCDAB ABCDABCDABDE"; + int index = bm.search(text); + assertEquals(-1, index); + } + + @Test + public void testPatternAtBeginning() { + BoyerMoore bm = new BoyerMoore("ABC"); + String text = "ABCDEF"; + int index = bm.search(text); + assertEquals(0, index); + } + + @Test + public void testPatternAtEnd() { + BoyerMoore bm = new BoyerMoore("CDE"); + String text = "ABCDEFGCDE"; + int index = bm.search(text); + assertEquals(2, index); + } + + + @Test + public void testEmptyPattern() { + BoyerMoore bm = new BoyerMoore(""); + String text = "Hello world"; + int index = bm.search(text); + assertEquals(0, index); + } + + @Test + public void testStaticSearchMethod() { + int index = BoyerMoore.search("ABCDEFGCDE", "CDE"); + assertEquals(2, index); + } + +} From 807e668f8174339732f81e76f56caaa23a9c266a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20L=C3=B3pez=20N=C3=BA=C3=B1ez?= Date: Sun, 8 Jun 2025 18:04:20 +0200 Subject: [PATCH 05/17] Add Wiki link BoyerMoore.java --- src/main/java/com/thealgorithms/searches/BoyerMoore.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/thealgorithms/searches/BoyerMoore.java b/src/main/java/com/thealgorithms/searches/BoyerMoore.java index cd25cb3fe133..895255121669 100644 --- a/src/main/java/com/thealgorithms/searches/BoyerMoore.java +++ b/src/main/java/com/thealgorithms/searches/BoyerMoore.java @@ -1,11 +1,11 @@ package com.thealgorithms.searches; - /** * Boyer-Moore string search algorithm * Efficient algorithm for substring search. * - * @author Pau -*/ + * @see + * https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string-search_algorithm + */ public class BoyerMoore { From a685d22d02e1334a7545d247538cd135b1dfc0e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20L=C3=B3pez=20N=C3=BA=C3=B1ez?= Date: Sun, 8 Jun 2025 18:11:43 +0200 Subject: [PATCH 06/17] Add Clang format BoyerMoore.java --- .../com/thealgorithms/searches/BoyerMoore.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/thealgorithms/searches/BoyerMoore.java b/src/main/java/com/thealgorithms/searches/BoyerMoore.java index 895255121669..1a03b6817ae9 100644 --- a/src/main/java/com/thealgorithms/searches/BoyerMoore.java +++ b/src/main/java/com/thealgorithms/searches/BoyerMoore.java @@ -1,12 +1,10 @@ package com.thealgorithms.searches; + /** * Boyer-Moore string search algorithm * Efficient algorithm for substring search. - * - * @see - * https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string-search_algorithm + * https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string-search-algorithm */ - public class BoyerMoore { private final int R; @@ -17,10 +15,12 @@ public BoyerMoore(String pat) { this.pattern = pat; this.R = 256; this.right = new int[R]; - for (int c = 0; c < R; c++) + for (int c = 0; c < R; c++) { right[c] = -1; - for (int j = 0; j < pat.length(); j++) + } + for (int j = 0; j < pat.length(); j++) { right[pat.charAt(j)] = j; + } } public int search(String text) { @@ -36,8 +36,9 @@ public int search(String text) { break; } } - if (skip == 0) + if (skip == 0) { return i; + } } return -1; } From 83f7eeaaaaeebcbd3b0dcc373672cebc93039173 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20L=C3=B3pez=20N=C3=BA=C3=B1ez?= Date: Sun, 8 Jun 2025 18:12:28 +0200 Subject: [PATCH 07/17] Add Clang format BoyerMooreTest.java --- .../com/thealgorithms/searches/BoyerMooreTest.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java b/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java index 6edb70d71062..8c69ce93026d 100644 --- a/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java +++ b/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java @@ -1,6 +1,7 @@ package com.thealgorithms.searches; import static org.junit.jupiter.api.Assertions.assertEquals; + import org.junit.jupiter.api.Test; public class BoyerMooreTest { @@ -34,22 +35,21 @@ public void testPatternAtEnd() { BoyerMoore bm = new BoyerMoore("CDE"); String text = "ABCDEFGCDE"; int index = bm.search(text); - assertEquals(2, index); - } - + assertEquals(7, index); + } @Test public void testEmptyPattern() { BoyerMoore bm = new BoyerMoore(""); String text = "Hello world"; int index = bm.search(text); - assertEquals(0, index); + assertEquals(0, index); } @Test public void testStaticSearchMethod() { - int index = BoyerMoore.search("ABCDEFGCDE", "CDE"); - assertEquals(2, index); + String text = "ABCDEFGCDE"; + int index = BoyerMoore.search(text, "CDE"); + assertEquals(7, index); } - } From 3734afad146c9acbde7ed8d3a11b81a9c54eb8c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20L=C3=B3pez=20N=C3=BA=C3=B1ez?= Date: Sun, 8 Jun 2025 18:18:29 +0200 Subject: [PATCH 08/17] Update BoyerMoore.java --- .../thealgorithms/searches/BoyerMoore.java | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/thealgorithms/searches/BoyerMoore.java b/src/main/java/com/thealgorithms/searches/BoyerMoore.java index 1a03b6817ae9..92a7d9388539 100644 --- a/src/main/java/com/thealgorithms/searches/BoyerMoore.java +++ b/src/main/java/com/thealgorithms/searches/BoyerMoore.java @@ -1,9 +1,7 @@ -package com.thealgorithms.searches; - /** * Boyer-Moore string search algorithm * Efficient algorithm for substring search. - * https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string-search-algorithm + * https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string-search_algorithm */ public class BoyerMoore { @@ -13,34 +11,40 @@ public class BoyerMoore { public BoyerMoore(String pat) { this.pattern = pat; - this.R = 256; + this.R = 256; // extended ASCII this.right = new int[R]; + + // Initialize all occurrences as -1 for (int c = 0; c < R; c++) { right[c] = -1; } + + // Fill the actual value of last occurrence of a character for (int j = 0; j < pat.length(); j++) { right[pat.charAt(j)] = j; } } public int search(String text) { + if (pattern.isEmpty()) return 0; + int m = pattern.length(); int n = text.length(); - int skip; + int skip; for (int i = 0; i <= n - m; i += skip) { skip = 0; for (int j = m - 1; j >= 0; j--) { - if (pattern.charAt(j) != text.charAt(i + j)) { - skip = Math.max(1, j - right[text.charAt(i + j)]); + char txtChar = text.charAt(i + j); + char patChar = pattern.charAt(j); + if (patChar != txtChar) { + skip = Math.max(1, j - right[txtChar]); break; } } - if (skip == 0) { - return i; - } + if (skip == 0) return i; // found } - return -1; + return -1; // not found } public static int search(String text, String pattern) { From d5033595f8eaab811f00e4165ddcb422040e31cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20L=C3=B3pez=20N=C3=BA=C3=B1ez?= Date: Sun, 8 Jun 2025 18:23:47 +0200 Subject: [PATCH 09/17] Update BoyerMooreTest.java --- src/test/java/com/thealgorithms/searches/BoyerMooreTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java b/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java index 8c69ce93026d..0a4414bf9ed8 100644 --- a/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java +++ b/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java @@ -3,6 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; +import com.thealgorithms.searches.BoyerMoore; public class BoyerMooreTest { From a448bfb92bcef3a0d7db98d8bfa0e6098525f0a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20L=C3=B3pez=20N=C3=BA=C3=B1ez?= Date: Sun, 8 Jun 2025 18:30:41 +0200 Subject: [PATCH 10/17] Update BoyerMoore.java --- .../java/com/thealgorithms/searches/BoyerMoore.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/thealgorithms/searches/BoyerMoore.java b/src/main/java/com/thealgorithms/searches/BoyerMoore.java index 92a7d9388539..59400be80276 100644 --- a/src/main/java/com/thealgorithms/searches/BoyerMoore.java +++ b/src/main/java/com/thealgorithms/searches/BoyerMoore.java @@ -1,3 +1,5 @@ +package com.thealgorithms.searches; + /** * Boyer-Moore string search algorithm * Efficient algorithm for substring search. @@ -11,15 +13,13 @@ public class BoyerMoore { public BoyerMoore(String pat) { this.pattern = pat; - this.R = 256; // extended ASCII + this.R = 256; this.right = new int[R]; - // Initialize all occurrences as -1 for (int c = 0; c < R; c++) { right[c] = -1; } - // Fill the actual value of last occurrence of a character for (int j = 0; j < pat.length(); j++) { right[pat.charAt(j)] = j; } @@ -42,9 +42,9 @@ public int search(String text) { break; } } - if (skip == 0) return i; // found + if (skip == 0) return i; } - return -1; // not found + return -1; } public static int search(String text, String pattern) { From 2416061bbd9ebcb52dc7e1d94d08ed111bb792b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20L=C3=B3pez=20N=C3=BA=C3=B1ez?= Date: Sun, 8 Jun 2025 18:37:53 +0200 Subject: [PATCH 11/17] Update BoyerMoore.java --- .../com/thealgorithms/searches/BoyerMoore.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/thealgorithms/searches/BoyerMoore.java b/src/main/java/com/thealgorithms/searches/BoyerMoore.java index 59400be80276..95a9ffcb281e 100644 --- a/src/main/java/com/thealgorithms/searches/BoyerMoore.java +++ b/src/main/java/com/thealgorithms/searches/BoyerMoore.java @@ -1,7 +1,7 @@ package com.thealgorithms.searches; /** - * Boyer-Moore string search algorithm + * Boyer-Moore string search algorithm. * Efficient algorithm for substring search. * https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string-search_algorithm */ @@ -13,7 +13,7 @@ public class BoyerMoore { public BoyerMoore(String pat) { this.pattern = pat; - this.R = 256; + this.R = 256; this.right = new int[R]; for (int c = 0; c < R; c++) { @@ -26,7 +26,9 @@ public BoyerMoore(String pat) { } public int search(String text) { - if (pattern.isEmpty()) return 0; + if (pattern.isEmpty()) { + return 0; + } int m = pattern.length(); int n = text.length(); @@ -42,9 +44,11 @@ public int search(String text) { break; } } - if (skip == 0) return i; + if (skip == 0) { + return i; + } } - return -1; + return -1; } public static int search(String text, String pattern) { From ed75b53d914c1d7f539dd6e014687a1a21a238ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20L=C3=B3pez=20N=C3=BA=C3=B1ez?= Date: Sun, 8 Jun 2025 18:38:37 +0200 Subject: [PATCH 12/17] Update BoyerMooreTest.java --- src/test/java/com/thealgorithms/searches/BoyerMooreTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java b/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java index 0a4414bf9ed8..8c69ce93026d 100644 --- a/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java +++ b/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java @@ -3,7 +3,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; -import com.thealgorithms.searches.BoyerMoore; public class BoyerMooreTest { From 615705362b6a31597a468b23be4f81f0cc129c18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20L=C3=B3pez=20N=C3=BA=C3=B1ez?= Date: Sun, 8 Jun 2025 18:46:46 +0200 Subject: [PATCH 13/17] Update BoyerMoore.java --- .../java/com/thealgorithms/searches/BoyerMoore.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/thealgorithms/searches/BoyerMoore.java b/src/main/java/com/thealgorithms/searches/BoyerMoore.java index 95a9ffcb281e..c295c021f82c 100644 --- a/src/main/java/com/thealgorithms/searches/BoyerMoore.java +++ b/src/main/java/com/thealgorithms/searches/BoyerMoore.java @@ -7,9 +7,9 @@ */ public class BoyerMoore { - private final int R; - private int[] right; - private String pattern; + private final int R; // Radix + private final int[] right; // Bad character rule table + private final String pattern; public BoyerMoore(String pat) { this.pattern = pat; @@ -45,10 +45,11 @@ public int search(String text) { } } if (skip == 0) { - return i; + return i; // Match found } } - return -1; + + return -1; // No match } public static int search(String text, String pattern) { From 53885dbb31bf34317315f1b09f715b199b00d3c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20L=C3=B3pez=20N=C3=BA=C3=B1ez?= Date: Sun, 8 Jun 2025 18:47:13 +0200 Subject: [PATCH 14/17] Update BoyerMooreTest.java --- src/test/java/com/thealgorithms/searches/BoyerMooreTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java b/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java index 8c69ce93026d..fb480757c4e4 100644 --- a/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java +++ b/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java @@ -35,7 +35,7 @@ public void testPatternAtEnd() { BoyerMoore bm = new BoyerMoore("CDE"); String text = "ABCDEFGCDE"; int index = bm.search(text); - assertEquals(7, index); + assertEquals(2, index); // Cambiado de 7 a 2 } @Test @@ -50,6 +50,6 @@ public void testEmptyPattern() { public void testStaticSearchMethod() { String text = "ABCDEFGCDE"; int index = BoyerMoore.search(text, "CDE"); - assertEquals(7, index); + assertEquals(2, index); // Cambiado de 7 a 2 } } From 2780c5cf9bef8d79dd42ca66270bb26659d3103d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20L=C3=B3pez=20N=C3=BA=C3=B1ez?= Date: Sun, 8 Jun 2025 18:54:37 +0200 Subject: [PATCH 15/17] Add BoyerMoore.java --- src/main/java/com/thealgorithms/searches/BoyerMoore.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/thealgorithms/searches/BoyerMoore.java b/src/main/java/com/thealgorithms/searches/BoyerMoore.java index c295c021f82c..aed423c6c4de 100644 --- a/src/main/java/com/thealgorithms/searches/BoyerMoore.java +++ b/src/main/java/com/thealgorithms/searches/BoyerMoore.java @@ -7,16 +7,16 @@ */ public class BoyerMoore { - private final int R; // Radix + private final int radix; // Radix (number of possible characters) private final int[] right; // Bad character rule table private final String pattern; public BoyerMoore(String pat) { this.pattern = pat; - this.R = 256; - this.right = new int[R]; + this.radix = 256; + this.right = new int[radix]; - for (int c = 0; c < R; c++) { + for (int c = 0; c < radix; c++) { right[c] = -1; } From 448f8e69ca3bc457c2517adac0de5240de50879c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20L=C3=B3pez=20N=C3=BA=C3=B1ez?= Date: Sun, 8 Jun 2025 19:00:42 +0200 Subject: [PATCH 16/17] Add BoyerMoore.java --- src/main/java/com/thealgorithms/searches/BoyerMoore.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/searches/BoyerMoore.java b/src/main/java/com/thealgorithms/searches/BoyerMoore.java index aed423c6c4de..6998021503cc 100644 --- a/src/main/java/com/thealgorithms/searches/BoyerMoore.java +++ b/src/main/java/com/thealgorithms/searches/BoyerMoore.java @@ -52,7 +52,7 @@ public int search(String text) { return -1; // No match } - public static int search(String text, String pattern) { + public static int staticSearch(String text, String pattern) { return new BoyerMoore(pattern).search(text); } } From 1061c74f6416ffe819283002edfc6dcf4033340f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20L=C3=B3pez=20N=C3=BA=C3=B1ez?= Date: Sun, 8 Jun 2025 19:01:39 +0200 Subject: [PATCH 17/17] Add BoyerMooreTest.java --- .../java/com/thealgorithms/searches/BoyerMooreTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java b/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java index fb480757c4e4..9021eacbb8ee 100644 --- a/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java +++ b/src/test/java/com/thealgorithms/searches/BoyerMooreTest.java @@ -35,7 +35,7 @@ public void testPatternAtEnd() { BoyerMoore bm = new BoyerMoore("CDE"); String text = "ABCDEFGCDE"; int index = bm.search(text); - assertEquals(2, index); // Cambiado de 7 a 2 + assertEquals(2, index); // Primera ocurrencia de "CDE" } @Test @@ -49,7 +49,7 @@ public void testEmptyPattern() { @Test public void testStaticSearchMethod() { String text = "ABCDEFGCDE"; - int index = BoyerMoore.search(text, "CDE"); - assertEquals(2, index); // Cambiado de 7 a 2 + int index = BoyerMoore.staticSearch(text, "CDE"); + assertEquals(2, index); // Primera ocurrencia de "CDE" } }