This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
case class Window(l: Int, r: Int) { | |
def size = r - l | |
def ||->(i: Int): Window = this.copy(r = r + i) //widen by moving right edge right | |
def |->|(i: Int): Window = this.copy(l = l + i) //shrink by moving left edge right | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
case class State[Container](current: Window, best: Window, contained: Container) { | |
def lastIndex(): Int = current.r | |
def firstIndex(): Int = current.l | |
override def toString = | |
s"current: [${current.l}, ${current.r}], best: [${best.l}, ${best.r}], excess: ${contained}" | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
trait Container[T, F[_]] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def lengthOfLongestSubstring(in: String): Int = { | |
//A type alias to simplify the syntax | |
type CounterContainer[T] = Map[T, Int] | |
//The elements are Chars and our container, a map with the Char as key and the frequence as value holds the elements within the current window | |
val longest = new SlidingWindow[Char, CounterContainer[Char]] { | |
override val input: Seq[Char] = in |
OlderNewer