我正在解决学习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的功能样式。
答案 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程序。