fun lengthOfLongestSubstring(s: String): Int { var maxLen = 0 // 最长不重复字串长度 var startIndex = 0 // 当前子串起始索引 var nowIndex = 0 // 当前子串的索引 // 记录在当前子串中每个char的索引 val charIndexMap = mutableMapOf<Char, Int>() // 查找最长非重复子串 while (nowIndex < s.length) { val c = s[nowIndex] // 若子串中已存在该字符,并且字符索引在子串范围内 if (charIndexMap.containsKey(c) && charIndexMap[c]!! >= startIndex) { startIndex = charIndexMap[c]!! + 1 charIndexMap[c] = nowIndex++ }else {// 否则加入或刷新map charIndexMap[c] = nowIndex++ val len = nowIndex - startIndex maxLen = if (len > maxLen) len else maxLen } } return maxLen}