Ruby方式检查字符串回文
我想检查字符串是否是回文或使用ruby代码。
我是ruby的首发,因此不太喜欢ruby中的string methods
如果您不熟悉Ruby的String
方法,那么您应该查看文档 ,这非常好。 Mithun的回答已经向您展示了基本原理,但由于您是Ruby的新手,因此还需要注意以下几点:
*)如果你有一个谓词方法,习惯上用一个尾随问号命名,例如palindrome?
。
*)布尔表达式计算为布尔值,因此您不需要显式返回true
或false
。 因此,一个短暂的惯用版本将是
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