MST

星途 面试题库

面试题:Kotlin字符串操作的性能优化与自定义扩展

你正在处理一个非常大的Kotlin字符串,其中包含大量的单词,单词之间以空格分隔。现在需要实现以下功能:1. 编写一个高效的方法,统计每个单词出现的次数,并返回一个`Map<String, Int>`,要求尽可能优化性能,避免不必要的内存开销。2. 为`String`类创建一个自定义扩展函数,该函数接收一个字符作为参数,将字符串中所有该字符替换为另一个指定字符,且在处理大字符串时性能最优。请详细说明实现思路并给出完整代码。
43.7万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

1. 统计单词出现次数

实现思路

  1. 使用split(" ")方法将字符串按空格分割成单词数组。
  2. 遍历单词数组,使用HashMap来统计每个单词出现的次数。HashMapput方法会在键已存在时更新值,不存在时插入新键值对,利用这一特性可以高效统计。

代码实现

fun countWords(str: String): Map<String, Int> {
    val wordMap = mutableMapOf<String, Int>()
    str.split(" ").forEach { word ->
        wordMap[word] = wordMap.getOrDefault(word, 0) + 1
    }
    return wordMap
}

2. 字符串字符替换扩展函数

实现思路

  1. 使用StringBuilder类来高效处理字符串修改。String类本身是不可变的,每次修改操作都会创建新的字符串实例,而StringBuilder可以在原有的基础上进行修改,减少内存开销。
  2. 遍历字符串,逐个字符判断,如果是需要替换的字符,则使用StringBuilderappend方法添加替换后的字符,否则添加原字符。

代码实现

fun String.replaceChar(oldChar: Char, newChar: Char): String {
    val result = StringBuilder()
    for (char in this) {
        if (char == oldChar) {
            result.append(newChar)
        } else {
            result.append(char)
        }
    }
    return result.toString()
}