0

最近,我一直在研究一种算法来查找字符串中最长的回文(忽略空格和不区分大小写)。我一直在使用 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
4

0 回答 0