查找字符串是否是Ruby中按字母顺序排列的单词?

时间:2018-07-03 23:20:28

标签: ruby string

提示是要编写一个ordered_word?方法,该方法返回单词中的字母是否按字母顺序出现。假设该字符串仅包含小写字母,没有空格或标点符号。我的解决方案如下:

def ordered_word?(word)
  letters=word.split("")
  (0..(letters.length-1)).all? do |i|
    if letters[i]<=letters[i+1]
      return true
    end
  end 
end

但是,它不能通过我所有的测试用例,我也不知道为什么。参数“ amz”和“ zma”会产生预期的输出,但是即使它类似于“ abcdgfe”,即使它不是一个有序的单词,它仍然会返回true。

2 个答案:

答案 0 :(得分:3)

return从整个方法中返回。您只需通过不指定return并仅依靠该块的最后一行作为返回值来从该块“返回”,就像这样:

def ordered_word?(word)
  letters=word.split("")
  (0..(letters.length-1)).all? do |i|
    letters[i]<=letters[i+1]
  end
end

尽管您可以使用一些方便的红宝石方法将其简化为:

def ordered_word?(word)
  word.each_char.each_cons(2).all? do |first, second|
    first <= second
  end
end

答案 1 :(得分:3)

一个非常简单的比较是:

word.chars.sort.join == word

这是将字符串的字符作为数组,对它们进行字母数字排序,然后将它们重新组合成字符串。然后将该字符串与原始字符串进行比较,如果相等,则不进行任何重新排序,并且已经对该字符串进行了排序。

如果要将其作为方法扩展到String类:

class String

  def ordered?
    chars.sort.join == self
  end
end