Ruby方式检查字符串回文

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

我是ruby的首发,因此不太喜欢ruby中的string methods

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

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

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

 def palindrome?(str) str == str.reverse end 

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

 class String def palindrome? self == self.reverse end end 

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

 foo = "racecar" def foo.palindrome? self == self.reverse end 

*)你可能想让回文检查更复杂一些,例如当涉及到案例或空白时,你也能够检测回文句子,像“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 
 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 

递归解决方案显示了如何在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 

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

 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) 
 class String def palindrome? self.downcase == self.reverse.downcase end end puts "racecar".palindrome? # true puts "Racecar".palindrome? # true puts "mississippi".palindrome? # false 
 > first method a= "malayalam" if a == a.reverse puts "a is true" else puts "false" end > second one a= "malayalam" a=a.split("") i=0 ans=[] a.count.times do i=i+1 k=a[-(i)] ans << k end if a== ans puts "true" else puts "false" end 
 str= gets.chomp str_rev="" n=1 while str.length >=n str_rev+=str[-n] n+=1 end if str_rev==str puts "YES" else puts "NO" end