From 03f11bb3557824e610f8c2a0877d42a8c9df1c88 Mon Sep 17 00:00:00 2001 From: mateuszz0000 Date: Mon, 1 Jun 2020 09:11:48 +0200 Subject: [PATCH 1/9] Added doctests --- strings/naive_string_search.py | 44 ++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/strings/naive_string_search.py b/strings/naive_string_search.py index a8c2ea584399..5191e86cc76c 100644 --- a/strings/naive_string_search.py +++ b/strings/naive_string_search.py @@ -1,4 +1,6 @@ """ +https://en.wikipedia.org/wiki/String-searching_algorithm#Na%C3%AFve_string_search + this algorithm tries to find the pattern from every position of the mainString if pattern is found from position i it add it to the answer and does the same for position i+1 @@ -9,24 +11,30 @@ """ -def naivePatternSearch(mainString, pattern): - patLen = len(pattern) - strLen = len(mainString) - position = [] - for i in range(strLen - patLen + 1): - match_found = True - for j in range(patLen): - if mainString[i + j] != pattern[j]: - match_found = False +def naive_pattern_search(main_string: str, pattern: str) -> list: + """ + >>> naive_pattern_search("ABAAABCDBBABCDDEBCABC", "ABC") + [4, 10, 18] + + >>> naive_pattern_search("", "ABC") + [] + + >>> naive_pattern_search("TEST", "TEST") + [0] + + >>> naive_pattern_search("ABCDEGFTEST", "TEST") + [7] + """ + pat_len, str_len = len(pattern), len(main_string) + positions = [] + for i in range(str_len - pat_len + 1): + found = True + for j in range(pat_len): + if main_string[i + j] != pattern[j]: + found = False break - if match_found: - position.append(i) - return position + if found: + positions.append(i) -mainString = "ABAAABCDBBABCDDEBCABC" -pattern = "ABC" -position = naivePatternSearch(mainString, pattern) -print("Pattern found in position ") -for x in position: - print(x) + return positions From 6f9f0868f5d94d3a3a6c3f9915981528a597c6ea Mon Sep 17 00:00:00 2001 From: mateuszz0000 Date: Mon, 1 Jun 2020 09:20:16 +0200 Subject: [PATCH 2/9] Added __main__ --- strings/naive_string_search.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/strings/naive_string_search.py b/strings/naive_string_search.py index 5191e86cc76c..4a1673132a39 100644 --- a/strings/naive_string_search.py +++ b/strings/naive_string_search.py @@ -38,3 +38,7 @@ def naive_pattern_search(main_string: str, pattern: str) -> list: positions.append(i) return positions + + +if __name__ == "__main__": + assert [3] == naive_pattern_search("ABCDEFG", "DE") From 5994d73063e1c4ca64fb3bf95e987317ca7cc1ed Mon Sep 17 00:00:00 2001 From: mateuszz0000 Date: Mon, 1 Jun 2020 11:05:19 +0200 Subject: [PATCH 3/9] Commit suggestion --- strings/naive_string_search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/strings/naive_string_search.py b/strings/naive_string_search.py index 4a1673132a39..a68a947463bf 100644 --- a/strings/naive_string_search.py +++ b/strings/naive_string_search.py @@ -41,4 +41,4 @@ def naive_pattern_search(main_string: str, pattern: str) -> list: if __name__ == "__main__": - assert [3] == naive_pattern_search("ABCDEFG", "DE") + assert naive_pattern_search("ABCDEFG", "DE") == [3] From 0188e28295eded1861a2474f8f889d39ff4cf260 Mon Sep 17 00:00:00 2001 From: mateuszz0000 Date: Mon, 1 Jun 2020 11:29:03 +0200 Subject: [PATCH 4/9] Undo changes to keep only doctests and typehints --- strings/naive_string_search.py | 35 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/strings/naive_string_search.py b/strings/naive_string_search.py index a68a947463bf..f0d7d971a2f8 100644 --- a/strings/naive_string_search.py +++ b/strings/naive_string_search.py @@ -11,34 +11,33 @@ """ -def naive_pattern_search(main_string: str, pattern: str) -> list: +def naivePatternSearch(mainString: str, pattern: str) -> list: """ - >>> naive_pattern_search("ABAAABCDBBABCDDEBCABC", "ABC") + >>> naivePatternSearch("ABAAABCDBBABCDDEBCABC", "ABC") [4, 10, 18] - >>> naive_pattern_search("", "ABC") + >>> naivePatternSearch("", "ABC") [] - >>> naive_pattern_search("TEST", "TEST") + >>> naivePatternSearch("TEST", "TEST") [0] - >>> naive_pattern_search("ABCDEGFTEST", "TEST") + >>> naivePatternSearch("ABCDEGFTEST", "TEST") [7] """ - pat_len, str_len = len(pattern), len(main_string) - positions = [] - for i in range(str_len - pat_len + 1): - found = True - for j in range(pat_len): - if main_string[i + j] != pattern[j]: - found = False + patLen = len(pattern) + strLen = len(mainString) + position = [] + for i in range(strLen - patLen + 1): + match_found = True + for j in range(patLen): + if mainString[i + j] != pattern[j]: + match_found = False break - - if found: - positions.append(i) - - return positions + if match_found: + position.append(i) + return position if __name__ == "__main__": - assert naive_pattern_search("ABCDEFG", "DE") == [3] + assert naivePatternSearch("ABCDEFG", "DE") == [3] From 63f0a9721eced2d43c4ec39ae6c1f67504c08527 Mon Sep 17 00:00:00 2001 From: mateuszz0000 Date: Mon, 1 Jun 2020 14:58:20 +0200 Subject: [PATCH 5/9] Reundo function name with params --- strings/naive_string_search.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/strings/naive_string_search.py b/strings/naive_string_search.py index f0d7d971a2f8..7a6abcdf94f8 100644 --- a/strings/naive_string_search.py +++ b/strings/naive_string_search.py @@ -11,27 +11,27 @@ """ -def naivePatternSearch(mainString: str, pattern: str) -> list: +def naive_pattern_search(main_string: str, pattern: str) -> list: """ - >>> naivePatternSearch("ABAAABCDBBABCDDEBCABC", "ABC") + >>> naive_pattern_search("ABAAABCDBBABCDDEBCABC", "ABC") [4, 10, 18] - >>> naivePatternSearch("", "ABC") + >>> naive_pattern_search("", "ABC") [] - >>> naivePatternSearch("TEST", "TEST") + >>> naive_pattern_search("TEST", "TEST") [0] - >>> naivePatternSearch("ABCDEGFTEST", "TEST") + >>> naive_pattern_search("ABCDEGFTEST", "TEST") [7] """ patLen = len(pattern) - strLen = len(mainString) + strLen = len(main_string) position = [] for i in range(strLen - patLen + 1): match_found = True for j in range(patLen): - if mainString[i + j] != pattern[j]: + if main_string[i + j] != pattern[j]: match_found = False break if match_found: @@ -40,4 +40,4 @@ def naivePatternSearch(mainString: str, pattern: str) -> list: if __name__ == "__main__": - assert naivePatternSearch("ABCDEFG", "DE") == [3] + assert naive_pattern_search("ABCDEFG", "DE") == [3] From 328991a86448666d52be84a2a9ab57c556b9d0d0 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Mon, 1 Jun 2020 15:08:49 +0200 Subject: [PATCH 6/9] Update naive_string_search.py --- strings/naive_string_search.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/strings/naive_string_search.py b/strings/naive_string_search.py index 7a6abcdf94f8..0cd8da24f0f5 100644 --- a/strings/naive_string_search.py +++ b/strings/naive_string_search.py @@ -11,26 +11,22 @@ """ -def naive_pattern_search(main_string: str, pattern: str) -> list: +def naive_pattern_search(s: str, pattern: str) -> list: """ >>> naive_pattern_search("ABAAABCDBBABCDDEBCABC", "ABC") [4, 10, 18] - >>> naive_pattern_search("", "ABC") [] - >>> naive_pattern_search("TEST", "TEST") [0] - >>> naive_pattern_search("ABCDEGFTEST", "TEST") [7] """ - patLen = len(pattern) - strLen = len(main_string) + pat_len = len(pattern) position = [] - for i in range(strLen - patLen + 1): + for i in range(len(s) - pat_len + 1): match_found = True - for j in range(patLen): + for j in range(pat_len): if main_string[i + j] != pattern[j]: match_found = False break @@ -41,3 +37,4 @@ def naive_pattern_search(main_string: str, pattern: str) -> list: if __name__ == "__main__": assert naive_pattern_search("ABCDEFG", "DE") == [3] + print(f"{naive_pattern_search("ABAAABCDBBABCDDEBCABC", "ABC")=}") From ff4bb9c117838bb3f3c131ac81ca89bcbf32580c Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Mon, 1 Jun 2020 15:10:01 +0200 Subject: [PATCH 7/9] Update naive_string_search.py --- strings/naive_string_search.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/strings/naive_string_search.py b/strings/naive_string_search.py index 0cd8da24f0f5..157d1ae6f847 100644 --- a/strings/naive_string_search.py +++ b/strings/naive_string_search.py @@ -15,6 +15,8 @@ def naive_pattern_search(s: str, pattern: str) -> list: """ >>> naive_pattern_search("ABAAABCDBBABCDDEBCABC", "ABC") [4, 10, 18] + >>> naive_pattern_search("ABAAABCDBBABCDDEBCABC", "ABC") + [] >>> naive_pattern_search("", "ABC") [] >>> naive_pattern_search("TEST", "TEST") @@ -27,7 +29,7 @@ def naive_pattern_search(s: str, pattern: str) -> list: for i in range(len(s) - pat_len + 1): match_found = True for j in range(pat_len): - if main_string[i + j] != pattern[j]: + if s[i + j] != pattern[j]: match_found = False break if match_found: From a9c3ac20dfc4968638655fd2c1ddc001ed1c4661 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Mon, 1 Jun 2020 15:20:01 +0200 Subject: [PATCH 8/9] Update naive_string_search.py --- strings/naive_string_search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/strings/naive_string_search.py b/strings/naive_string_search.py index 157d1ae6f847..3287b6734661 100644 --- a/strings/naive_string_search.py +++ b/strings/naive_string_search.py @@ -39,4 +39,4 @@ def naive_pattern_search(s: str, pattern: str) -> list: if __name__ == "__main__": assert naive_pattern_search("ABCDEFG", "DE") == [3] - print(f"{naive_pattern_search("ABAAABCDBBABCDDEBCABC", "ABC")=}") + print(f"{naive_pattern_search('ABAAABCDBBABCDDEBCABC', 'ABC') = }") From cb7028730169ee26b3523265649d329f72d18c8e Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Mon, 1 Jun 2020 15:27:50 +0200 Subject: [PATCH 9/9] Update naive_string_search.py --- strings/naive_string_search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/strings/naive_string_search.py b/strings/naive_string_search.py index 3287b6734661..f28950264121 100644 --- a/strings/naive_string_search.py +++ b/strings/naive_string_search.py @@ -15,7 +15,7 @@ def naive_pattern_search(s: str, pattern: str) -> list: """ >>> naive_pattern_search("ABAAABCDBBABCDDEBCABC", "ABC") [4, 10, 18] - >>> naive_pattern_search("ABAAABCDBBABCDDEBCABC", "ABC") + >>> naive_pattern_search("ABC", "ABAAABCDBBABCDDEBCABC") [] >>> naive_pattern_search("", "ABC") []