Skip to content

Commit 47a44ab

Browse files
Alfredoxrockpre-commit-ci[bot]MaximSmolskiy
authored
Improve longest_common_substring.py (#12705)
* Update longest_common_substring.py - Combined the ans_index and ans_length into a single tuple to track the best match (position + length) more cleanly. - Early exit for empty strings. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update longest_common_substring.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Maxim Smolskiy <[email protected]>
1 parent 59c3c8b commit 47a44ab

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

dynamic_programming/longest_common_substring.py

+9-6
Original file line numberDiff line numberDiff line change
@@ -43,22 +43,25 @@ def longest_common_substring(text1: str, text2: str) -> str:
4343
if not (isinstance(text1, str) and isinstance(text2, str)):
4444
raise ValueError("longest_common_substring() takes two strings for inputs")
4545

46+
if not text1 or not text2:
47+
return ""
48+
4649
text1_length = len(text1)
4750
text2_length = len(text2)
4851

4952
dp = [[0] * (text2_length + 1) for _ in range(text1_length + 1)]
50-
ans_index = 0
51-
ans_length = 0
53+
end_pos = 0
54+
max_length = 0
5255

5356
for i in range(1, text1_length + 1):
5457
for j in range(1, text2_length + 1):
5558
if text1[i - 1] == text2[j - 1]:
5659
dp[i][j] = 1 + dp[i - 1][j - 1]
57-
if dp[i][j] > ans_length:
58-
ans_index = i
59-
ans_length = dp[i][j]
60+
if dp[i][j] > max_length:
61+
end_pos = i
62+
max_length = dp[i][j]
6063

61-
return text1[ans_index - ans_length : ans_index]
64+
return text1[end_pos - max_length : end_pos]
6265

6366

6467
if __name__ == "__main__":

0 commit comments

Comments
 (0)