bra*_*ess 34 language-agnostic arrays puzzle
我的问题是在给定的数组中找到重复的字符序列.简单地说,识别字符出现的模式.
.---.---.---.---.---.---.---.---.---.---.---.---.---.---.
1: | J | A | M | E | S | O | N | J | A | M | E | S | O | N |
'---'---'---'---'---'---'---'---'---'---'---'---'---'---'
.---.---.---.---.---.---.---.---.---.---.---.---.---.---.---.
2: | R | O | N | R | O | N | R | O | N | R | O | N | R | O | N |
'---'---'---'---'---'---'---'---'---'---'---'---'---'---'---'
.---.---.---.---.---.---.---.---.---.---.---.---.
3: | S | H | A | M | I | L | S | H | A | M | I | L |
'---'---'---'---'---'---'---'---'---'---'---'---'
.---.---.---.---.---.---.---.---.---.---.---.---.---.---.---.---.---.---.
4: | C | A | R | P | E | N | T | E | R | C | A | R | P | E | N | T | E | R |
'---'---'---'---'---'---'---'---'---'---'---'---'---'---'---'---'---'---'
鉴于以前的数据,结果应该是:
"JAMESON""RON""SHAMIL""CARPENTER"Pét*_*rök 18
对于你的例子,我的第一种方法是
C)CARPENTER)当然,这仅适用于可能数组的非常有限的子集,其中相同的单词一次又一次地重复,从头开始,之间没有杂散字符,并且其第一个字符不在单词内重复.但是你所有的例子都属于这一类 - 我更喜欢最简单的解决方案,它可能有用:-)
如果重复的单词多次包含第一个字符(例如CACTUS),则可以扩展算法以查找该字符的后续出现,而不仅仅是第一个出现(以便它找到整个重复的单词,而不仅仅是它的子串) ).
请注意,此扩展算法将为您的第二个示例提供不同的结果,即RONRON代替RON.
在Python中,您可以利用正则表达式:
def recurrence(text):
import re
for i in range(1, len(text)/2 + 1):
m = re.match(r'^(.{%d})\1+$'%i, text)
if m: return m.group(1)
recurrence('abcabc') # Returns 'abc'
Run Code Online (Sandbox Code Playgroud)
我不确定这会如何转化为Java或C.(这是我喜欢Python的原因之一,我想.:-)