Longest Substring Without Repeating Characters - LeetCode
문자열 s
가 주어지면 중복되는 문자가 없는 연속된 문자열 중 가장 긴 문자열의 길이를 구하는 문제이다.
연속된 문자열이 핵심이라고 생각했고 투포인터 알고리즘을 응용하여 풀었다.
반복문에서 문자를 계속 str
에 더하고 map
에 추가하였다. str.length === map.size
라면 중복된 문자가 없다는 뜻이고 str.length > map.size
면 중복된 문자가 있다는 뜻이기에 그땐 str
의 맨 앞자리를 없애는 방식으로 접근하였다.
var lengthOfLongestSubstring = function (s) {
let str = "";
let answer = 0;
const map = new Map();
for (let hi = 0; hi < s.length; ++hi) {
str += s[hi];
map.set(s[hi], map.get(s[hi]) + 1 || 1);
if (str.length === map.size) answer = Math.max(answer, str.length);
while (str.length > map.size) {
if (map.get(str[0]) === 1) map.delete(str[0]);
else map.set(str[0], map.get(str[0]) - 1);
str = str.substring(1);
if (str.length === map.size) answer = Math.max(answer, str.length);
}
}
return answer;
};