【发布时间】:2018-11-10 00:56:54
【问题描述】:
我知道哈希码通常是检查动态集的最快方法,但我想知道检查动态字符串是否在编译时已知的只读字符串集中的最快方法是什么。 (我的意思主要是 {length: usize; chars: &[u8]} 字符串,而不是绳索或 cons 字符串。)
目前,我通常在做这样的事情,但似乎不是最理想的:
// What I mean
let keywords = Set::new(["do", "if", "in", "for", "new", "try"]);
fun is_keyword(s: &str) { keywords.contains(s) }
// What I write
function is_keyword(s: &str) {
match s.length() {
2 -> s == "do" || s == "if" || s == "in",
3 -> s == "for" || s == "new" || s == "try",
// etc.
_ -> false
}
}
对于 C 风格的字符串集,有什么比从第二个变体派生的更快的方法吗?或者它是否尽可能快?
这与语言无关 - 我不在乎答案使用什么语言。由于熟悉,我只是使用 Rust。
【问题讨论】:
-
最快的是生成trie的编译时间,这给了O(L)时间,其中
L是您要查找的字符串的长度。
标签: string algorithm language-agnostic