1. /**
    2. * 题目:字符串出现的不重复最长长度
    3. * 整体思路:
    4. * 用一个滑动窗口装没有重复的字符,枚举字符记录最大值即可
    5. * 对于遇到重复字符如何收缩窗口大小?
    6. * 我们可以用 map 维护字符的索引,遇到相同的字符,把左边界移动过去即可
    7. * 挪动的过程中记录最大长度
    8. */
    9. function lengthOfLongestSubstring(s) {
    10. let map = new Map();
    11. let i = -1
    12. let res = 0
    13. let n = s.length
    14. for (let j = 0; j < n; j++) {
    15. if (map.has(s[j])) {
    16. i = Math.max(i, map.get(s[j]))
    17. }
    18. res = Math.max(res, j - i)
    19. map.set(s[j], j)
    20. }
    21. return res
    22. };