最近、私は文字列内で最長の回文を見つけるアルゴリズムに取り組んでいます (スペースを無視し、大文字と小文字を区別しません)。私は Ruby を使用しており、 このウィンドウ検索アルゴリズムを開発しました。
私の質問は次のとおりです。文字列で最長の回文を見つけるためのより高速な方法はありますか (非特定のケースに基づいて)?
def longest_palindrome(input)
string = input.gsub(" ","") # remove white spaces
string.downcase! # convert to lowercase
length = string.length
search = length - 1 # search window size
while search > 0 # search while chars > 2
for i in 0..(length-search) # search every window
sub = string[i..(search+i)] # check substring
return sub if is_palindrome?(sub)
end # return asap once found
search -= 1 # dec. window size by 1
end
return false # false if none found
end
def is_palindrome?(string)
return false if string.length < 2 # false if 1 character
array = string.chars
n = array.length-1 # last string index
for i in 0..(n/2) # check if whole string
return false if array[i] != array[n-i] # check if mirror image
end
return true # true if all tests pass
end