如何使用 Ruby 代码检查字符串是否为回文?
palindrome?
。true
或false
。 因此,一个简短的惯用版本将是:def palindrome?(str)
str == str.reverse
end
*) 由于Ruby的类是开放的,因此您可以将此添加到字符串类中:
class String
def palindrome?
self == self.reverse
end
end
*) 如果您不想进行猴子补丁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
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
def palindrome?(string)
string[0] == string[-1] && (string.length <= 2 || palindrome?(string[1..-2]))
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
def palindrome?(str)
return "Please pass the string" if str.nil?
str = str.downcase
str_array = str.split('')
reverse_string = str_array.each_index{ |index| str_array[str_array.count - index - 1 ] end
return ("String #{str} is not a palindrome") unless str == reverse_string.join('')
"String #{str} is palindrome"
end
解决方案1:时间复杂度=O(n),空间复杂度=O(n)
该解决方案不使用String类的reverse方法,它使用一个栈(我们可以使用只允许从一端输入和输出元素的数组来模拟栈)。
def is_palindrome(str)
stack = []
reversed_str = ''
str.each_char do |char|
stack << char
end
until stack.empty?
reversed_str += stack.pop
end
if reversed_str == str
return true
else
return false
end
end
解决方案2:时间复杂度=O(n),空间复杂度=O(1)
def inplace_reversal!(str)
i =0
j = str.length - 1
while i < j
temp = str[i]
str[i] = str[j]
str[j] = temp
i+=1
j-=1
end
return str
end
self.
的使用是不必要的(但没有点的self
的使用是必要的)。 - Dave Schweisguth