在Scala中实现算法以确定字符串是否具有所有唯一字符

时间:2017-07-08 20:54:16

标签: scala

我正在解决学习Scala的琐碎问题。以下是我的想法

def isUnique(str: String): Boolean = {
    if (str.length > 128) return false
    val uniqueChars = new Array[Boolean](128)

    !(str.map(c => addChar(c, uniqueChars)).find(identity).isDefined)
}

def addChar(ch: Char, uniqueChars: Array[Boolean]): Boolean = {
    if (uniqueChars(ch)) return true else {
    uniqueChars(ch) = true;
    return false
}
是吗?

请注意,此时我并不关心逻辑或优化。我只需要学习Scala的方法。

[编辑] 我们假设我们不想使用字符串distinct方法。我只需要验证Scala的功能样式。

2 个答案:

答案 0 :(得分:4)

好的,所以如果你不想使用distinct库方法,那么递归通常是可行的方法。

def isUnique(str: String, chrs: Set[Char] = Set()): Boolean =
  str.length == 0 ||
    !chrs(str.head) &&
      isUnique(str.tail, chrs + str.head)

isUnique("abcdexf")  // true
isUnique("abcdxxf")  // false
isUnique("fbcdexf")  // false
isUnique("abdbexf")  // false

答案 1 :(得分:-3)

你想通过以某种方式实际做到这一点来学习scala的做法",这在scala中使用是没有意义的吗? Scala的做法str == str.distinct。如果"您不想使用distinct",那么str.toSet.size == str.length。如果您不想要toSet,那么str.groupBy(identity).values.map(_.size).forall(_ == 1)。 如果你不想要.groupBy那么 str.sorted.sliding(2).forall(s => s.head != s.last)

等。 ......在某些时候," scala方式"只是停止了" scala方式"并成为用scala语法编写的java程序。