面试题答案
一键面试可能影响性能的因素
- 内存分配:常规方法可能会多次分配内存,例如每次处理一个字符就分配新内存存储转换后的字符,大量的小内存分配会带来额外开销。
- 遍历次数:如果采用逐字符处理并拼接的方式,需要多次遍历字符串,增加了处理时间。
优化后的实现方案
fn convert_to_uppercase_better(s: &str) -> String {
let mut result = String::with_capacity(s.len());
for c in s.chars() {
result.push(c.to_uppercase().next().unwrap());
}
result
}
优化思路和原理
- 预先分配内存:使用
String::with_capacity(s.len())
预先分配足够的内存空间,避免在后续添加字符时频繁的内存重新分配,提升性能。 - 单次遍历:通过
for c in s.chars()
遍历字符串中的每个字符,在一次遍历中完成字符转换并添加到结果字符串,减少了不必要的遍历次数,从而提高效率。