LeetCode 질문 3 반복되는 문자가없는 가장 긴 부분 문자열

아이디어 :
슬라이딩 윈도우. 시작과 끝은 각각 슬라이딩 창의 시작과 끝을 나타내며 반복되는 문자가없는 부분 문자열을 나타냅니다. 방문한 캐릭터의 위치를 ​​기록하기 위해지도를 사용합니다. 미끄러지는 방법은 끝이 점차 끝에 가까워지는 것입니다. 그리고 그 과정에서 시작의 가치를 유지하십시오. 끝이 반복되는 문자에 액세스 할 때 시작을 업데이트합니다. 시작과 끝은 모두 더 커질 수 있고 작아 질 수는 없습니다.

다른 관점에서 실제로 슬라이딩 윈도우는 끝으로 끝나는 가장 길고 가장 긴 하위 문자열을 나타냅니다.

class Solution {
    public int lengthOfLongestSubstring(String s) {
        if(s == null) {
            return 0;
        }
        int start = 0,end = 0,ans = 0;
        HashMap<Character,Integer> map = new HashMap<>();
        for(;end < s.length(); end++) {
            if(map.containsKey(s.charAt(end))) {
                start = Math.max(map.get(s.charAt(end)) + 1,start);
            }
            map.put(s.charAt(end),end);
            ans = Math.max(ans,end - start + 1);
        }
        return ans;
    }
}

추천

출처blog.csdn.net/vxzhg/article/details/104263895