解决方法
所有呈现的解都具有O(n)的时间复杂度.为了简单起见,我使用String#include?检查这个词.这可以使用正则表达式以字符串=〜regex的形式进行.
File.read(filename).include?(word)
如果您的文件非常大,这不是最佳解决方案,因为您将完整的文件读入内存并开始搜索.你的内存复杂度是O(n)
File.open(filename) do |f| f.any? do |line| line.include?(word) end end
如果你的文件很大,但是你知道你的行是一个恒定值的上限,你现在的内存复杂度为O(1).
File.open(filename) do |f| tmp= f.read(1024) next true if tmp.include?(word) until f.eof? tmp= tmp[(-1*word.size)..-1] + f.read(1024) next true if tmp.include?(word) end next false end