You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何高效生成重复n次指定字符的字符串?

更高效的Kotlin重复字符串生成方案

嘿,这个问题提得非常到位!你当前用循环拼接字符串的方式确实存在性能瓶颈——因为Kotlin里的String是不可变对象,每次执行s += "*"都会创建一个全新的字符串实例,频繁的对象创建和内存拷贝直接导致了O(n²)的时间复杂度,当n很大的时候性能下降会很明显。

下面给你几种无需手动循环、时间复杂度为O(n)的优雅实现方式:

1. 最简洁的方式:使用标准库的repeat()方法

Kotlin的String类已经内置了repeat()扩展函数,专门用来生成重复指定次数的字符串,底层实现已经做了性能优化,完全不需要自己写循环:

val n = 100
val s = "*".repeat(n)

这一行代码就搞定了,可读性拉满,性能也最优——底层会直接分配足够大小的字符数组,一次性填充后生成最终字符串,全程只有一次内存分配和拷贝。

2. 手动构建字符数组(适合自定义场景)

如果需要更灵活的字符生成逻辑(比如不是固定的*,而是根据索引生成不同字符),可以先创建CharArray再转成String:

val n = 100
val s = String(CharArray(n) { '*' })

这里通过CharArray的初始化lambda,直接把每个位置的字符设为*,然后通过String的构造函数一次性生成结果,同样是O(n)的时间复杂度,没有额外的对象开销。

3. 用buildString构建(复杂场景首选)

如果后续需要扩展字符串的构建逻辑(比如在重复的*前后加其他内容),可以用Kotlin标准库的buildString函数,它内部使用StringBuilder来高效构建字符串,避免了频繁的字符串拼接:

val n = 100
val s = buildString {
    repeat(n) {
        append('*')
    }
}

buildString会自动管理StringBuilder的生命周期,你只需要专注于内容的添加,性能同样是O(n)级别。

为什么这些方法更高效?

这些方案的核心都是一次性分配足够的内存空间,然后直接填充内容,避免了循环拼接时多次创建新字符串的开销,从根本上把时间复杂度从O(n²)降到了O(n)。

内容的提问来源于stack exchange,提问作者Rainmaker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:06:16