CodeKata Longest Substring Without Repeating Characters

chaeruru·2021년 8월 12일
0

알고리즘 풀이

목록 보기
7/9

문제 링크

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;
};
profile
알고리즘과 프론트엔드 부셔버리기

0개의 댓글