From 95d2efaefe33d629e22b21a6b302258e631b6817 Mon Sep 17 00:00:00 2001
From: mindaugl <mindelek@gmail.com>
Date: Mon, 26 May 2025 20:26:45 +0300
Subject: [PATCH 1/5] Add doctests for the boyer_moore_search algorithm.

---
 strings/boyer_moore_search.py | 51 ++++++++++++++++++++++++-----------
 1 file changed, 35 insertions(+), 16 deletions(-)

diff --git a/strings/boyer_moore_search.py b/strings/boyer_moore_search.py
index 9615d2fd659b..861e62408bfa 100644
--- a/strings/boyer_moore_search.py
+++ b/strings/boyer_moore_search.py
@@ -11,23 +11,33 @@
 a shift is proposed that moves the entirety of Pattern past
 the point of mismatch in the text.
 
-If there no mismatch then the pattern matches with text block.
+If there is no mismatch then the pattern matches with text block.
 
 Time Complexity : O(n/m)
     n=length of main string
     m=length of pattern string
 """
 
-from __future__ import annotations
-
 
 class BoyerMooreSearch:
+    """
+    Example usage:
+
+        text = "ABAABA"
+        pattern = "AB"
+        bms = BoyerMooreSearch(text, pattern)
+        positions = bms.bad_character_heuristic()
+
+    where 'positions' contain the locations where the pattern was matched.
+    """
+
     def __init__(self, text: str, pattern: str):
         self.text, self.pattern = text, pattern
         self.textLen, self.patLen = len(text), len(pattern)
 
     def match_in_pattern(self, char: str) -> int:
-        """finds the index of char in pattern in reverse order
+        """
+        Finds the index of char in pattern in reverse order.
 
         Parameters :
             char (chr): character to be searched
@@ -35,6 +45,10 @@ def match_in_pattern(self, char: str) -> int:
         Returns :
             i (int): index of char from last in pattern
             -1 (int): if char is not found in pattern
+
+        >>> bms = BoyerMooreSearch("ABAABA", "AB")
+        >>> bms.match_in_pattern("B")
+        1
         """
 
         for i in range(self.patLen - 1, -1, -1):
@@ -44,8 +58,8 @@ def match_in_pattern(self, char: str) -> int:
 
     def mismatch_in_text(self, current_pos: int) -> int:
         """
-        find the index of mis-matched character in text when compared with pattern
-        from last
+        Find the index of mis-matched character in text when compared with pattern
+        from last.
 
         Parameters :
             current_pos (int): current index position of text
@@ -53,6 +67,10 @@ def mismatch_in_text(self, current_pos: int) -> int:
         Returns :
             i (int): index of mismatched char from last in text
             -1 (int): if there is no mismatch between pattern and text block
+
+        >>> bms = BoyerMooreSearch("ABAABA", "AB")
+        >>> bms.mismatch_in_text(2)
+        3
         """
 
         for i in range(self.patLen - 1, -1, -1):
@@ -61,7 +79,14 @@ def mismatch_in_text(self, current_pos: int) -> int:
         return -1
 
     def bad_character_heuristic(self) -> list[int]:
-        # searches pattern in text and returns index positions
+        """
+        Finds the positions of the pattern location.
+
+        >>> bms = BoyerMooreSearch("ABAABA", "AB")
+        >>> bms.bad_character_heuristic()
+        [0, 3]
+        """
+
         positions = []
         for i in range(self.textLen - self.patLen + 1):
             mismatch_index = self.mismatch_in_text(i)
@@ -75,13 +100,7 @@ def bad_character_heuristic(self) -> list[int]:
         return positions
 
 
-text = "ABAABA"
-pattern = "AB"
-bms = BoyerMooreSearch(text, pattern)
-positions = bms.bad_character_heuristic()
+if __name__ == "__main__":
+    import doctest
 
-if len(positions) == 0:
-    print("No match found")
-else:
-    print("Pattern found in following positions: ")
-    print(positions)
+    doctest.testmod()

From 1a5616c830d136626378c44979d84e3ab39c719e Mon Sep 17 00:00:00 2001
From: Maxim Smolskiy <mithridatus@mail.ru>
Date: Mon, 2 Jun 2025 20:26:13 +0300
Subject: [PATCH 2/5] Update boyer_moore_search.py

---
 strings/boyer_moore_search.py | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/strings/boyer_moore_search.py b/strings/boyer_moore_search.py
index 861e62408bfa..e2eb6f9e8e2f 100644
--- a/strings/boyer_moore_search.py
+++ b/strings/boyer_moore_search.py
@@ -18,14 +18,11 @@
     m=length of pattern string
 """
 
-
 class BoyerMooreSearch:
     """
     Example usage:
 
-        text = "ABAABA"
-        pattern = "AB"
-        bms = BoyerMooreSearch(text, pattern)
+        bms = BoyerMooreSearch(text="ABAABA", pattern="AB")
         positions = bms.bad_character_heuristic()
 
     where 'positions' contain the locations where the pattern was matched.

From c97cf7afcbad0bcd853770c78820e0dd34c68a24 Mon Sep 17 00:00:00 2001
From: "pre-commit-ci[bot]"
 <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Date: Mon, 2 Jun 2025 17:26:36 +0000
Subject: [PATCH 3/5] [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci
---
 strings/boyer_moore_search.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/strings/boyer_moore_search.py b/strings/boyer_moore_search.py
index e2eb6f9e8e2f..ab4c2d073bb5 100644
--- a/strings/boyer_moore_search.py
+++ b/strings/boyer_moore_search.py
@@ -18,6 +18,7 @@
     m=length of pattern string
 """
 
+
 class BoyerMooreSearch:
     """
     Example usage:

From b0cdc8d00ee7df7ea8bea9c6065334b2da438bff Mon Sep 17 00:00:00 2001
From: Maxim Smolskiy <mithridatus@mail.ru>
Date: Mon, 2 Jun 2025 20:28:12 +0300
Subject: [PATCH 4/5] Update boyer_moore_search.py

---
 strings/boyer_moore_search.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/strings/boyer_moore_search.py b/strings/boyer_moore_search.py
index ab4c2d073bb5..28b7c13ac626 100644
--- a/strings/boyer_moore_search.py
+++ b/strings/boyer_moore_search.py
@@ -44,7 +44,7 @@ def match_in_pattern(self, char: str) -> int:
             i (int): index of char from last in pattern
             -1 (int): if char is not found in pattern
 
-        >>> bms = BoyerMooreSearch("ABAABA", "AB")
+        >>> bms = BoyerMooreSearch(text="ABAABA", pattern="AB")
         >>> bms.match_in_pattern("B")
         1
         """

From e43a10e5d9b4c29a9633bdfb69024a61b194a308 Mon Sep 17 00:00:00 2001
From: Maxim Smolskiy <mithridatus@mail.ru>
Date: Mon, 2 Jun 2025 20:30:33 +0300
Subject: [PATCH 5/5] Update boyer_moore_search.py

---
 strings/boyer_moore_search.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/strings/boyer_moore_search.py b/strings/boyer_moore_search.py
index 28b7c13ac626..ad14a504f792 100644
--- a/strings/boyer_moore_search.py
+++ b/strings/boyer_moore_search.py
@@ -66,7 +66,7 @@ def mismatch_in_text(self, current_pos: int) -> int:
             i (int): index of mismatched char from last in text
             -1 (int): if there is no mismatch between pattern and text block
 
-        >>> bms = BoyerMooreSearch("ABAABA", "AB")
+        >>> bms = BoyerMooreSearch(text="ABAABA", pattern="AB")
         >>> bms.mismatch_in_text(2)
         3
         """
@@ -80,7 +80,7 @@ def bad_character_heuristic(self) -> list[int]:
         """
         Finds the positions of the pattern location.
 
-        >>> bms = BoyerMooreSearch("ABAABA", "AB")
+        >>> bms = BoyerMooreSearch(text="ABAABA", pattern="AB")
         >>> bms.bad_character_heuristic()
         [0, 3]
         """