比方說,我有一個名稱字典(一個巨大的CSV文件)。我想從一個沒有明顯的可解析點(。, - ,_)的電子郵件中猜出一個名字。我想要做這樣的事情:走過字符串猜測基於名稱字典的電子郵件名稱?
dict = ["sam", "joe", "john", "parker", "jane", "smith", "doe"]
word = "johnsmith"
x = 0
y = word.length-1
name_array = []
for i in x..y
match_me = word[x..i]
dict.each do |name|
if match_me == name
name_array << name
end
end
end
name_array
# => ["john"]
不壞,但我想要的「約翰·史密斯」或[「約翰」,「史密斯」]
換句話說,我遞歸遍歷字(即,未分析的電子郵件字符串,「[email protected]」),直到我在字典中找到匹配。 我知道:這是非常低效的。如果有更簡單的方法來做到這一點,我全是耳朵!
如果沒有更好的方法去做,那麼請告訴我如何解決上面的例子,因爲它有兩個主要缺陷:(1)我如何設置循環的長度(請參閱找到「我(2)如何在上面的例子中增加「x」,這樣我就可以在給定任意字符串的情況下遍歷所有可能的字符組合?
問題,找到環路的長度,「我」的:
for an arbitrary word, how can we derive "i" given the pattern below?
for a (i = 1)
a
for ab (i = 3)
a
ab
b
for abc (i = 6)
a
ab
abc
b
bc
c
for abcd (i = 10)
a
ab
abc
abcd
b
bc
bcd
c
cd
d
for abcde (i = 15)
a
ab
abc
abcd
abcde
b
bc
bcd
bcde
c
cd
cde
d
de
e
進一步的研究表明,可以使用三角形序列序列來導出「i」:a(n)= C(n + 1,2)= n(n + 1)/ 2 = 0 + 1 + 2 +。 .. + N。 http://oeis.org/search?q=1%2C+3%2C+6%2C+10%2C+15&language=english&go=Search – MorningHacker