Kotlin - 字符串中的唯一字符

h1h*_*1h1 1 functional-programming unique kotlin

我的函数应该返回一个布尔值,指示输入字符串是否包含所有唯一字符。

例如“abc”返回真,“abca”返回假

fun uniqueCharacters(s: String): Boolean = s.groupBy { it }
    .values
    .stream()
    .allMatch { it.size == 1 }
Run Code Online (Sandbox Code Playgroud)

有没有更有效的方法来解决这个问题?如果我以非功能方式解决这个问题,我会将所有字符存储在 Map 中,该值是到目前为止该字符的计数,如果它大于 1,则中断并返回 false。

不确定如何最好地将其转换为功能性 Kotlin 代码。

IR4*_*R42 6

您可以使用all函数并Set::add作为它的谓词

fun main() {
    println("abc".allUnique()) // true
    println("abca".allUnique()) // false
}

fun String.allUnique(): Boolean = all(hashSetOf<Char>()::add)
Run Code Online (Sandbox Code Playgroud)

很懒,函数找到第一个重复就返回结果