编写一个接受小写字母字符串的方法(没有大写字母,没有重复)。考虑字符串的子串:字符串中包含的连续字母序列。 找到最长的字母串,这是一个回文。
基于本地方法Palindrome?(字符串),我使用测试用例实现了如下最长-palindrome(字符串):
def palindrome?(string)
i = 0
while i < string.length
if string[i] != string[(string.length - 1) - i]
return false
end
i += 1
end
return true
end
def longest_palindrome(string)
dix = 0
lstr = ""
lstrc = nil
while dix < string.length
dix2 = 1
while dix2 < string.length
str = string.slice(dix,dix2)
count = str.length
if palindrome?(str)
if lstrc == nil || lstrc < count
lstr = str
lstrc = count
end
end
dix2 += 1
end
dix += 1
end
puts(lstr)
return lstr
end
# These are tests to check that your code is working. After writing
# your solution, they should all print true.
puts(
'longest_palindrome("abcbd") == "bcb": ' +
(longest_palindrome('abcbd') == 'bcb').to_s
)
puts(
'longest_palindrome("abba") == "abba": ' +
(longest_palindrome('abba') == 'abba').to_s
)
puts(
'longest_palindrome("abcbdeffe") == "effe": ' +
(longest_palindrome('abcbdeffe') == 'effe').to_s
)
测试结果如下:
bcb
longest_palindrome("abcbd") == "bcb": true
bb
longest_palindrome("abba") == "abba": false
effe
longest_palindrome("abcbdeffe") == "effe": true
为什么第二次测试失败了?
答案 0 :(得分:1)
...这一行阻止你考虑整个字符串
while dix2 < string.length
因此当dix
是整个字符串时,您没有对回文进行任何测试
将行更改为...
while dix2 <= string.length
如果你这样做,那实际上会更有效率......
while dix2 <= string.length - dix
哪会阻止您测试(例如,长度为10的字符串),string(7,3)
和string(7,4)
以及string(7,5)
等等,它们基本上都是相同的字符串。