这个问题只是关于算法。 在伪码是这样的:找到字符串数组中的字符串的最快算法?
A = Array of strings; //let's say count(A) = N
S = String to find; //let's say length(S) = M
for (Index=0; Index<count(A); Index++)
if (A[Index]==S) {
print "First occurrence at index\x20"+Index;
break;
}
这对于回路需要字符串比较N次(或字节比较N * M次,O(N * M))。当数组A有很多项目,或者当字符串S太长时,这是不好的。
任何找到第一个出现的更好方法? O(K * logK)上的一些算法是可以的,但是在O(K)或O(logK)时最好,其中K是N或M.
我不介意在某些其他结构中添加或在比较循环之前做一些数据处理。
“当字符串S太长时”是不相关的,除非'A中有很多字符串'具有相同的长度和相同的长前缀。 (如果长度不同,则字符串相等性检查可以立即终止,或者一旦发现不匹配,就立即终止。) – Dougal 2012-04-28 18:43:58
为什么使用'\ x20'而不是空格?我很好奇:-) – 2012-04-28 18:46:01
哦,是的,比较时间更多地取决于阵列中的字符串的长度A – jondinham 2012-04-28 18:46:24