Çok sayıda dizim var. Benim amaçlarım için biri diğerinin bir rotasyonu ise iki dizgenin karşılığıdır (örneğin '1234', '3412' değerine eşittir).Dizeler rotasyona eşdeğer olduğunda
Her dizeyi Python'da tam olarak bir kez (dönüşüme kadar) işlemenin verimli bir yolu nedir?
ben gibi görünebilir ne istediğini Saf bir uygulama: O en küçük rotasyonlar benzersizdir daha
class DuplicateException(Exception): pass
seen = set()
for s in my_strings:
try:
s2 = s+s
for t in seen:
# Slick method I picked up here in SO
# for checking whether one string is
# a rotation of another
if len(s) == len(t) and t in s2:
raise DuplicateException()
seen.add(s)
process(s)
except DuplicateException: pass
Bu dize başına O (n²), aslında çok daha hızlı hesaplayabilirsiniz, bkz. Wikipedia "Sözcükbilgisel olarak minimum dize döndürme" –
@ FalkHüffner, bir şeyler olmalıydı! – Akavall
Sadece Falk Hüffner'in önerdiği bağlantıyı eklemek: http://en.wikipedia.org/wiki/Lexicographically_minimal_string_rotation –