Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions src/algorithms/string.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,17 @@ def find_common_tags(articles: list[dict[str, list[str]]]) -> set[str]:
if not articles:
return set()

common_tags = set(articles[0].get("tags", []))
for article in articles[1:]:
common_tags.intersection_update(article.get("tags", []))
# Pre-extract tag lists to avoid repeated .get lookups and slicing overhead
tag_lists = [article.get("tags", []) for article in articles]
# Sort by length to intersect smaller sets first (reducing intersection cost)
tag_lists.sort(key=len)
# Early return if any are empty
if not tag_lists[0]:
return set()
# Build initial set from smallest tag list
common_tags = set(tag_lists[0])
for tags in tag_lists[1:]:
common_tags.intersection_update(tags)
if not common_tags:
break
return common_tags