A minimal Python tool to group similar strings based on circular rotations. It identifies words that are rotations of each other and groups them into distinct sets.
Given a list of strings, it groups words that are circularly similar.
For example, "abcd" and "cdab" are grouped together because one can be rotated into the other.
["abcd", "cdab", "dabc", "bcda", "efgh", "ghfe"]
{
"abcd": ["abcd", "cdab", "dabc", "bcda"],
"efgh": ["efgh"],
"ghfe": ["ghfe"]
}
pip install rotate-group-words==0.3.0
from rotate-group-words import rotate_group_words
input = ["abcd", "cdab", "dabc", "bcda", "efgh", "ghfe"]
output = rotate_group_words(input)
print(output)
rgw -h
rgw -w abcd,cdab,dabc,bcda,efgh,ghfe
-
Similarity Rule: Two words are similar if a rotation of one equals the other.
-
Efficiency: The similarity check (is_similar) is optimized from O(n) to O(1).
-
Grouping: Uses a visited set to avoid duplicate processing.
-
Non-destructive: Does not mutate the input.
[✔] Improved is_similar()
from O(n) to O(1) by hashing normalized rotation forms.6003...5a36
[✔] Prevented duplicates using a visited set
. c7ca...c4e6
[✔] Cleaned output formatting for easier reading. 118c...1b3a
[✔] 100% test coverage and CI with GitHub Actions.dd53...4a27
[✔] Packaged and published to PyPI