Tôi đang tìm cách để kiểm tra xem một chuỗi đã cho có lặp lại chính nó cho toàn bộ chuỗi hay không.
Ví dụ:
[
'0045662100456621004566210045662100456621', # '00456621'
'0072992700729927007299270072992700729927', # '00729927'
'001443001443001443001443001443001443001443', # '001443'
'037037037037037037037037037037037037037037037', # '037'
'047619047619047619047619047619047619047619', # '047619'
'002457002457002457002457002457002457002457', # '002457'
'001221001221001221001221001221001221001221', # '001221'
'001230012300123001230012300123001230012300123', # '00123'
'0013947001394700139470013947001394700139470013947', # '0013947'
'001001001001001001001001001001001001001001001001001', # '001'
'001406469760900140646976090014064697609', # '0014064697609'
]
là các chuỗi lặp lại chính chúng, và
[
'004608294930875576036866359447',
'00469483568075117370892018779342723',
'004739336492890995260663507109',
'001508295625942684766214177978883861236802413273',
'007518796992481203',
'0071942446043165467625899280575539568345323741',
'0434782608695652173913',
'0344827586206896551724137931',
'002481389578163771712158808933',
'002932551319648093841642228739',
'0035587188612099644128113879',
'003484320557491289198606271777',
'00115074798619102416570771',
]
là những ví dụ về những cái không.
Các phần lặp lại của chuỗi tôi đưa ra có thể khá dài và bản thân các chuỗi có thể có 500 ký tự trở lên, do đó, việc lặp qua từng ký tự cố gắng xây dựng một mẫu sau đó kiểm tra mẫu so với phần còn lại của chuỗi có vẻ rất chậm. Nhân số đó với khả năng hàng trăm chuỗi và tôi không thể thấy bất kỳ giải pháp trực quan nào.
Tôi đã xem xét các biểu thức một chút và chúng có vẻ tốt khi bạn biết bạn đang tìm kiếm gì, hoặc ít nhất là độ dài của mẫu bạn đang tìm kiếm. Thật không may, tôi không biết.
Làm thế nào tôi có thể biết nếu một chuỗi đang lặp lại chính nó và nếu nó là, chuỗi lặp lại ngắn nhất là gì?