How to find the longest substring without repeating characters in Kotlin

1 Answer

0 votes
fun longestSubstring(s: String): String {
    var start = 0
    var maxLength = 0
    var longestSubstr = ""
    val charIndexMap = mutableMapOf<Char, Int>()

    for ((end, char) in s.withIndex()) {
        // If the character is already in the map and within the current window
        if (charIndexMap.containsKey(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)
        }
    }

    return longestSubstr
}

fun main() {
    // Test cases
    println(longestSubstring("abcabcbb")) // Output: "abc"
    println(longestSubstring("bbbbb"))    // Output: "b"
    println(longestSubstring("xwwwqfwwxqwyq")) // Output: "xqwy"
}

   
      
/*
run:
   
abc
b
xqwy
  
*/

 



answered Apr 7 by avibootz
...