我现在要道歉,因为这个问题在我脑海中听起来很愚蠢,而且我可能忽略了一些非常明显的事情。反正...
好的,所以我正在自学 scala,作为学习练习,我决定实现一种方法来确定一个字符串是否包含另一个更小的字符串。我做的第一件事是使用原始版本,在该版本中,我转到字符串的每个字母并开始向前检查以查看每个字符是否匹配。一切顺利。然后我决定实现一个更有效的方法,这就是我想出的(不包括特殊情况):
// return true if a is a substring of b
def is_sub(a: String, b: String) : Boolean = {
for(i <- 0 until b.length-a.length) { // O(n-m)
if(a.hashCode == b.substring(i,a.length+i).hashCode) return true // O(1) + O(1) + O(1)
}
return false
}
首先,有人可以检查我的工作并确保我是对的。我容易犯愚蠢的错误。其次,您能否检查以确保我的时间复杂度是准确的。假设前 2 个是我认为的,为什么在 wikipedia 页面上没有提到字符串搜索算法的这种方法?理论上,这应该是 O(nm),不需要预处理空间。
我在哪里搞砸了我对这个问题的分析?