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.0from 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