image.png

    解题思路:滑动窗口模板题

    时间复杂度:O(n),n为字符串的长度

    空间复杂度:O(n),n为字符串的长度

    1. class Solution {
    2. public int lengthOfLongestSubstring(String s) {
    3. int len = s.length();
    4. int ans = 0; //记录最终结果
    5. int left = 0, right = 0;
    6. Map<Character, Integer> map = new HashMap<>();
    7. while(right < len){
    8. char ch = s.charAt(right);
    9. //扩大滑动窗口
    10. right++;
    11. map.put(ch, map.getOrDefault(ch, 0) + 1);
    12. //检测滑动窗口是否存在重复字符
    13. while(map.getOrDefault(ch, 0) > 1){
    14. //如果存在重复字符,那么将左指针+1
    15. char ch1 = s.charAt(left);
    16. left++;
    17. map.put(ch1, map.getOrDefault(ch1, 0) - 1);
    18. }
    19. //更新结果
    20. ans = Math.max(ans, right - left);
    21. }
    22. return ans;
    23. }
    24. }