https://leetcode.com/problems/longest-substring-without-repeating-characters/
Given a string s, find the length of the longest substring without repeating characters.
s consists of English letters, digits, symbols and spaces.
이중 반복문으로 풀었는데 모범적인 답은 TwoPointer를 이용하는 문제였다. 이 방법을 사용해서 다시 풀었다. 시작 인덱스와 전진하는 인덱스를 따로 선언해준다. 중복을 체크할 HashSet을 선언해서 글자들을 넣어주고, 중복이면 중복인 글자가 사라질 때까지 Set의 처음부터 하나씩 제거한다. 전진하는 인덱스가 끝에 도달하면 종료한다.
import java.util.HashSet;
import java.util.Set;
class Solution {
public int lengthOfLongestSubstring(String s) {
int left = 0, right = 0, max = 0;
char[] arr = s.toCharArray();
Set<Character> set = new HashSet<>();
while (right < arr.length) {
if (!set.contains(arr[right])) {
set.add(arr[right]);
max = Math.max(max, set.size());
right++;
} else {
set.remove(arr[left]);
left++;
}
}
return max;
}
}