【发布时间】:2016-06-28 00:52:32
【问题描述】:
我正在学习在线课程:
如果
"z"出现在三个字母之后 和"a"之内,则编写一个接受字符串并返回true的方法。你可以假设字符串只包含小写字母。
这是给出的解决方案:
def nearby_az(string)
i = 0
while i < string.length
if string[i] != "a"
i += 1
next
end
j = i + 1
while (j < string.length) && (j <= i + 3)
if string[j] == "z"
return true
end
j += 1
end
i += 1
end
return false
end
这个解决方案对我来说似乎过于复杂。具体来说,我不明白为什么需要next。我想知道是否有人可以帮助我理解这个功能。
我的解决方案似乎与我尝试过的测试一样有效,但我想知道其他解决方案是否更好,以及我的解决方案是否存在我尚未遇到的问题。
def nearby_az(string)
i = 0
while i < string.length
while string[i] != "a"
i += 1
end
if string[i + 1] == "z" || string[i + 2] == "z" || string[i + 3] == "z"
return true
else
i += 1
end
return false
end
end
【问题讨论】:
-
当您获得 Ruby 的经验时,您会发现使用正则表达式(“regex”)可以最轻松地回答这个问题。如果
str是你的字符串,你可以简单地写str =~ /a.{,2}z/。其内容为“匹配 'a' 后跟零到两次之间的任意字母 (.)({,2}或{0,2}),后跟 'z'”。