题目描述:
    image.png
    输入输出Demo:
    image.png
    解析:
    在LeetCode上本题属于Medium难度,大概思路是维护2个指针,这2个指针之间的字符没有重复,滑动窗口

    1. class Solution {
    2. public int lengthOfLongestSubstring(String s) {
    3. int maxLen = 0;
    4. int left = 0;
    5. if (s.length() == 0) {
    6. return 0;
    7. }
    8. Map<Character, Integer> map = new HashMap<>(); //用来保存字符和出现的位置
    9. for (int right = 0; right < s.length(); right++) {
    10. char c = s.charAt(right); //当前的字符
    11. if (map.containsKey(c) && left <= map.get(c)) { //表明当前字符在窗口里(窗口里保存的是无重复的字符)
    12. left = map.get(c) + 1; //left指针移到字符(重复的)的下一位
    13. }
    14. map.put(c, right);
    15. maxLen = Math.max(maxLen, right - left + 1);
    16. }
    17. return maxLen;
    18. }
    19. }