您可以运行println(func(“ ctnkh”))吗?我有4个,但不是应该是5个吗?
def func(s: String): Int = {
if(s == "")
return 0
val len = s.length
var max = Int.MinValue
for(i <- 0 until len)
for(j <- i+1 to len) {
val ss = s.substring(i, j)
if(ss.mkString == ss.toSet.mkString) {
if(ss.length > max)
max = ss.length
}
}
max
}
我会很感激您的任何提示
答案 0 :(得分:2)
因为ValueError
的顺序与ss.toSet.mkString
的顺序不同
对于前。尝试以下操作:
ss.mkString
输出为:
ctnkh
ntchk
所以结果永远不会是5
编辑:如注释中所述,您不能依赖 val str = "ctnkh"
println(str.mkString)
println(str.toSet.mkString)
中字符的顺序,因为这种顺序是不可预测的。
答案 1 :(得分:1)
您可能是说:ss.distinct
。它将删除字符串中所有重复的字符,并保留其余字符的顺序。
def func(s: String): Int = {
val len = s.length
var max = 0
for(i <- 0 until len) {
for(j <- i+1 to len) {
val ss = s.substring(i, j)
if(ss == ss.distinct) {
max = max.max(ss.length)
}
}
}
max
}
println(func("ctnkh"))
按照您的期望提供了5
。
答案 2 :(得分:0)
为了进行测试,检查尺寸就足够了:
if (ss.length == ss.toSet.size) max = max.max(ss.length)
因为迭代顺序是多余的。