如何无需查看实现获知Go内置函数strings.Cut、strings.Contains的时间复杂度?
如何获知Go字符串内置函数的时间复杂度(无需查看实现代码)
- Go官方文档不会直接标注这类函数的时间复杂度,它更侧重描述函数的功能、参数和返回值,不会把性能细节(比如时间复杂度)写在文档里。
- 可以通过算法常识推导复杂度:
strings.Contains(s, substr):属于子串匹配问题,常规高效实现的时间复杂度为O(n+m)(n是原字符串长度,m是子串长度)。Go标准库的实现必然采用业界通用的高效算法,最坏情况下不会超出这个复杂度范围。strings.Cut(s, sep):核心逻辑是遍历字符串找到分隔符的首次出现,最多遍历一次整个字符串,所以时间复杂度为O(n)(n是原字符串长度)。
- Go标准库的设计原则是优先保证基础工具的高效性,这类高频使用的字符串函数不会出现低效实现,因此推导出来的复杂度具备可信度。
内容的提问来源于stack exchange,提问作者Afzal Khan
相关产品推荐
相关产品推荐

