[LeetCode] 3. Longest Substring Without Repeating Characters

lkdcode·2023년 8월 27일

Algorithm

목록 보기
14/47
post-thumbnail

3. Longest Substring Without Repeating Characters


문제 분석

주어진 문자열의 문자들을 순서대로 체크했을 때 문자들의 중복이 없게 가장 긴 길이를 리턴하라.


풀이 과정

문자를 체크하기 위해서 Set 자료구조를 활용하였다.
탐색을 위한 두 개의 인덱스를 선언한다. (leftIndex, rightIndex)
rightIndex를 1씩 증가시키면서 찾는 char word가 Set에
포함되어 있지 않다면 set에 word를 추가한다.
포함되어 있다면 set를 초기화시키고 leftIndex를 1증가시킨다.
재탐색을 위한 rightIndex를 leftIndex로 바꿔준다.


나의 생각

rightIndex를 leftIndex값으로 바꾸면서 재탐색하는 것이
시간 복잡도의 효율을 낮추는 것 같다.


코드

    public int lengthOfLongestSubstring(String s) {
        Set<Character> set = new HashSet<>();
        int rightIndex = 0;
        int leftIndex = 0;
        int count = 0;

        while (rightIndex < s.length()) {
            char word = s.charAt(rightIndex);

            if (!set.contains(word)) {
                set.add(word);
                rightIndex++;
            } else {
                set = new HashSet<>();
                leftIndex++;
                rightIndex = leftIndex;
            }

            count = Math.max(count, set.size());
        }

        return count;
    }

profile
되면 한다

0개의 댓글