我想写执行以下功能:查找字符串出现的所有的行号在文本文件中
给定一个文本文件,我想找到一个特定字符串的所有出现在这个文件;那么,对于每一次发生,它被发现的行应该被添加到列表中。我们假设每行只包含至多一个事件。文本文件可能变得非常大,这意味着一个简单的for-loop循环遍历每行文件将会太慢。
例如,假设我们有内容的文件:
- ABCDEFG
- HJKLMNO
- GFEDCBA
- PQRSTUV
如果我要搜索 “A” ,函数会在第1行和第3行上找到它,从而将1和3添加到列表中(然后返回列表)。
我正在考虑二元搜索,但它似乎要求将一个列表进行排序,并将元素分开 - 我正在寻找相同的值。
那么,是否有其他搜索算法可以基于我的功能,其性能与二分查找大致相同?
谢谢!
所有的行都是相同的长度吗? – Ryan
如果找到的字符串可以在任何行上的任何位置,那么在访问该特定行之前,您希望如何验证它不在任何给定行上?换句话说,你有没有想过比O(n)更好(for循环) –
这个文件有多大?而且,正如@Rune指出的那样,除非您预处理文件并维护每个单词的索引,否则无法比O(n)做得更好。 –