How to find the longest substring without repeating characters in Scala

1 Answer

0 votes
object LongestSubstring {

  def longestSubstring(s: String): String = {
    var start = 0
    var maxLength = 0
    var longestSubstr = ""
    val charIndexMap = scala.collection.mutable.Map[Char, Int]()

    for ((char, end) <- s.zipWithIndex) {
      // Check if the character is already in the map and within the current window
      if (charIndexMap.contains(char) && charIndexMap(char) >= start) {
        start = charIndexMap(char) + 1 // Move the start pointer to avoid duplicates
      }

      // Update the character's latest index
      charIndexMap(char) = end

      // Check if the current substring is the longest
      val currentLength = end - start + 1
      if (currentLength > maxLength) {
        maxLength = currentLength
        longestSubstr = s.substring(start, end + 1)
      }
    }

    longestSubstr
  }

  def main(args: Array[String]): Unit = {
    // Test cases
    println(longestSubstring("abcabcbb")) // Output: "abc"
    println(longestSubstring("bbbbb"))    // Output: "b"
    println(longestSubstring("xwwwqfwwxqwyq")) // Output: "xqwy"
  }
}

  
     
/*
run:
  
abc
b
xqwy

*/

 



answered Apr 7, 2025 by avibootz
...