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