【发布时间】:2020-05-14 07:22:16
【问题描述】:
def anagram(s)
counter = 0
if s.length.even?
splitter = s.chars.each_slice(s.length / 2).map(&:join)
left = splitter[0]
right = splitter[1]
return 0 if right == left
counter = left.length
leftchar = left.split
rightchar = right.split
rightchar.each do |n|
leftchar.each do |m|
counter -= 1 while n == m
end
end
counter
else
return -1
end
end
您好,我正在尝试用 ruby 解决 Hackerank 中的问题。该程序 是返回一个字符串中要更改的字符数,该字符串已被拆分以匹配另一个字符串。也就是说,如果这个词本身不是一个字谜。
到目前为止:
- 我首先检查字符串是否是第一个,然后再拆分 字符串一分为二,否则程序应该返回-1。
- 接下来,在拆分字符串后,我尝试检查是否可以 是出现在右字符串中的字符,而不出现在左字符串中。而且由于我的程序是返回字符数 需要更改,对于在左侧找到的每个字符 在右边,我从左边的长度减去一。
这就是我的逻辑。但我似乎错过了什么。有什么建议和提示我可以从中得到吗?谢谢。
【问题讨论】:
-
如果
n==m,counter -= 1 while n == m将永远循环。 (还有更多问题。) -
其他问题:
split在空白处拆分。使用split("")或chars。