Ruby方式来检查字符串回文

Mit*_*ran 13 ruby string ruby-on-rails ruby-on-rails-3

我想检查一个字符串是否是回文或使用ruby代码.

我是红宝石的首发,因此不太喜欢string methods红宝石

Mic*_*ohl 48

如果您不熟悉Ruby的String方法,那么您应该查看文档,这非常好.Mithun的回答已经向您展示了基本原理,但由于您不熟悉Ruby,因此还需要注意以下几点:

*)如果你有一个谓词方法,习惯上用一个尾随问号命名,例如palindrome?.

*)布尔表达式求值为布尔值,因此您不需要显式返回truefalse.因此,一个简短的惯用版本将是

def palindrome?(str)
  str == str.reverse
end
Run Code Online (Sandbox Code Playgroud)

*)由于Ruby的类是开放的,你可以将它添加到字符串类:

class String
  def palindrome?
    self == self.reverse
  end
end
Run Code Online (Sandbox Code Playgroud)

*)如果你不想猴子补丁String,你可以直接在单个对象上定义方法(或使用模块和对象#extend):

foo = "racecar"
def foo.palindrome?
  self == self.reverse
end
Run Code Online (Sandbox Code Playgroud)

*)您可能希望使回文检查更复杂,例如,当涉及到案例或空白时,您也能够检测回文句子,像"Racecar"等大写单词.

pal = "Never a foot too far, even."
class String
  def palindrome?
    letters = self.downcase.scan(/\w/)
    letters == letters.reverse
  end
end
pal.palindrome? #=> true
Run Code Online (Sandbox Code Playgroud)

  • 方法参数周围的括号也是如此.编码风格就像品味,其他人都很糟糕;-) (2认同)

Mit*_*ran 16

def check_palindromic(variable)
  if variable.reverse == variable #Check if string same when reversed 
    puts "#{ variable } is a palindrome."
  else # If string is not the same when reversed
    puts "#{ variable } is not a palindrome."
  end
end
Run Code Online (Sandbox Code Playgroud)


Pow*_*ers 9

递归解决方案显示了如何在Ruby中索引字符串:

def palindrome?(string)
  if string.length == 1 || string.length == 0
    true
  else
    if string[0] == string[-1]
      palindrome?(string[1..-2])
    else
      false
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

如果阅读Ruby字符串文档对您来说太无聊,请尝试使用CodeQuizzes上的Ruby练习题,然后您将学习大多数重要方法.


A H*_*H K 5

def is_palindrome(value)
 value.downcase!

 # Reverse the string
 reversed = ""
 count = value.length

 while count > 0
  count -= 1
  reversed += value[count]
 end
# Instead of writing codes for reverse string
# we can also use reverse ruby method
# something like this value == value.reverse  
if value == reversed
  return "#{value} is a palindrom"
 else
  return "#{value} is not a palindrom"
 end
end

puts "Enter a Word"
a = gets.chomp
p is_palindrome(a)
Run Code Online (Sandbox Code Playgroud)