Ruby 来段小清醒的代码

ane · 2014年05月07日 · 最后由 dalang 回复于 2014年05月12日 · 3165 次阅读

实现回文: 例如:“abcdedcba”

def huiwen(str)
  if str.length <= 1
    return true
  elsif str[0] == str[-1]
    huiwen(str[1..-2])
  else
    return false
  end
end

str.reverse == str

#1 楼 @larrylv 额,对方不让我用 reverse ,好吧,怪我没说清

#2 楼 @u1378130755 不让用就揍他,最烦这种故意整人的面试了

def huiwen str
    0.upto(str.size / 2) {|i| return false if str[i] != str[-(i + 1)]}
    true
end

#3 楼 @ddyy 哈哈,有道理。重点是你用某个方法的原代码的实现方式说吧,他还不认,觉得你说的啰嗦

#4 楼 @piecehealth 可以用 Enumerable#all?

def huiwen?(str)
  str =~ /\A(?<a>|.|(?:(?<b>.)\g<a>\k<b+0>))\z/
end

是这样么亲?

#6 楼 @doitian 为什么要 all?明显多了判断

#9 楼 @night_song 咋,一看还以为吕戈了

#11 楼 @u1378130755 不小心上了马甲...

#12 楼 @luikore 哈哈哈哈。。马甲也认识的

#12 楼 @luikore 传说中的 “小号”

#8 楼 @u1378130755

0.upto(str.size / 2).all? {|i| str[i] == str[-(i + 1)]}

松本行弘的程序世界里介绍了一种正则匹配回文的方法 要求 ruby1.9 以上 \A(?<a>|.|(?:(?<b>.)\g<a>\k<b+0>))\z

yfractal 关于递归 提及了此话题。 04月03日 10:57
需要 登录 后方可回复, 如果你还没有账号请 注册新账号