मेरे पास बड़ी संख्या में तार हैं। मेरे उद्देश्यों के लिए, यदि दो एक दूसरे के घूर्णन होते हैं (उदाहरण के लिए '1234' '3412' के बराबर है) तो दो तार समकक्ष होते हैं।जब तार घूर्णन के बराबर होते हैं
पायथन में बिल्कुल एक बार (रोटेशन तक) प्रत्येक स्ट्रिंग को संसाधित करने का एक प्रभावी तरीका क्या है?
मैं कैसा दिखाई दे सकता है जैसे चाहते हैं की एक भोली कार्यान्वयन:
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
यह प्रति स्ट्रिंग ओ (एन²) है, आप वास्तव में इसे बहुत तेज़ी से गणना कर सकते हैं, विकिपीडिया "लेक्सिकोग्राफिक रूप से न्यूनतम स्ट्रिंग रोटेशन" देखें –
@ फ़ॉकहफनर, कुछ होना था! – Akavall
फ़ॉक हफ़नर ने पोस्ट के लिंक को बस जोड़ दिया: http://en.wikipedia.org/wiki/Lexicographically_minimal_string_rotation –