2017-11-21 3 views
1

Ich möchte in der Lage sein, eine Sequenz von Strings einzulesen und den gemeinsamen Stamm der Strings zurückzugeben. Zum Beispiel hatte, wenn ich die folgende Sequenz:Wie findet man die gemeinsame Wurzel einer Folge von Strings rekursiv?

val testSeq: Seq[String] = Seq("RootA_", "RootB_", "RootC_") 

Dann nur die Zeichenfolge „Root“ zurückgegeben werden soll.

Meine aktuelle Funktion sieht so aus, aber die Verwendung von Schnittpunkt bedeutet, dass die unerwünschte "_" als Teil der Wurzel, d. H. "Root_" zurückgegeben wird. Ich habe versucht, mit TakeWhile, war aber nicht erfolgreich.

Wenn es eine eingebaute Scala-Methode für dieses könnte Sie bitte lassen Sie es mich wissen! Ansonsten, wenn jemand einen Riss bei der Lösung dieses einen haben möchte, wäre es sehr geschätzt!

Antwort

0

Soweit ich weiß, gibt es keine Scala stdlib Funktion, die das gemeinsame Präfix von zwei Strings zurückgibt.

können Sie gemeinsamen Präfix berechnen mit zip und takeWhile

def findRoot(seq: Seq[String]): String = {        

    def prefix(a: String, b: String) = a       
     .zip(b)       
     .takeWhile { case (a, b) => a == b } 
     .map(_._1) 
     .mkString             

    @tailrec              
    def find(ss: Seq[String], root: String): String = ss match { 
     case h :: Nil => prefix(h, root)       
     case h :: t => find(t, prefix(h, root))     
    }                

    find(seq.tail, seq.head)          

}                 
Verwandte Themen