相关疑难解决方法(0)

最小的重复子串

我正在看一个Perl 代码高尔夫页面(不要问为什么)并且遇到了这个:

第3洞 - 最小的重复模式

编写一个接受字符串的子例程,该字符串可能包含重复模式,并返回最小的重复子字符串.如果字符串不包含重复模式,则子例程应返回undef或空字符串.例如:

input    output 
'aaaaaa' 'a' 
'ababab' 'ab' 
'aabaab' 'aab' 
'ababaa' ''
Run Code Online (Sandbox Code Playgroud)

显然在Perl中,这可以表示为 sub g3 { pop=~/^(.*?)\1+\z/s&&$1 }

我不太了解Perl,所以我不明白它是如何工作的.我们在Scala能做的最好的事情是什么?我对优雅感兴趣而不是精确的角色数.

这是我的尝试,但它很难看,这就是我要问的原因.

def srp(s: String) =
  s.inits.toList.tail.init.map(i => (i * (s.size / i.size), i)).
    filter(_._1 == s).map(_._2).reverse.headOption.getOrElse("")
Run Code Online (Sandbox Code Playgroud)

scala

4
推荐指数
2
解决办法
727
查看次数

标签 统计

scala ×1