我试图解决这个Ruby问题但我无法弄清楚为什么有一个小的while循环差异会导致一个测试错误:longest_palindrome(" abba")输出&#34 ; BB"而不是" abba",这是假的。我只能使用for和while循环解决它,所以请不要使用高级方法。更容易突出代码块中的差异(第一个是工作解决方案,第二个是我的。还假设已经定义了palindrome?
方法):
def longest_palindrome(string)
best_palindrome = nil
idx1 = 0
***while idx1 < string.length
length = 1
while (idx1 + length) <= string.length
substring = string.slice(idx1, length)***
if palindrome?(substring) && (best_palindrome == nil || substring.length > best_palindrome.length)
best_palindrome = substring
end
length += 1
end
idx1 += 1
end
return best_palindrome
end
def longest_palindrome(string)
longest = nil
i = 0
***while i < string.length
i2 = 1
while i2 < string.length***
if palindrome?(string.slice(i, i2)) == true && (longest == nil || string.slice(i, i2).length > longest.length)
longest = string.slice(i, i2)
end
i2 += 1
end
i += 1
end
return longest
end
答案 0 :(得分:0)
这部分代码......
while i2 < string.length
...意味着你永远不会检查最大可能的长度。
"abba".slice(0,4)
是整个字符串,但您只能前往"abba".slice(0,3)
,即“abb”。
所以你永远不会测试整个字符串。
将行更改为...
while i2 <= string.length
......它应该没问题。