我最近发现 bytes.nth(i) 比 chars.nth(i) 快得多,并发现解释是因为 bytes.nth() 的时间复杂度为 O(1),而 chars.nth() 的时间复杂度为 O(1)在)。但为什么会这样呢?
我还看到了实例化变量并使用 chars.next() / .next_back() 的建议,如下例所示。
let mut word1_chars = word1.chars();
for i in (0..word1.len()).rev() {
...
word1_chars.next_back()
}
当我看到这个速度更快时,我感到震惊。我认为这一切都有一个合乎逻辑的解释,所以如果您知道,请分享:)。
提前致谢
.chars()
枚举字符串的 char
,而不仅仅是字节。char
(考虑到文本)和 byte(一个小整数)之间存在历史性的混淆;在快速而肮脏的尝试中,我们不会费心去区分。
另一方面,在 Rust 中,字符不是单个字节,而是一个更宽的整数,可能是解码 UTF-8 字节序列的结果。
这样的 single
char
可能来自一个、两个、三个或四个字节的序列。char
,因为前面的每个 char
都可能由不同的字节组成。
每一个都必须按顺序解码,当 N 个 char
被解码时我们停止。