⚡문제정보
중복없는 문자열의 최대 길이를 찾으면 되는 문제입니다.
🔍접근방법
Map이나 set을 사용해서 중복을 마주치는 순간 길이를 저장하면 되지 않을까?
🔍나의 실패한 풀이
var lengthOfLongestSubstring = function(s) {
let map = new Map()
let count = 0
let answer = 0
if(s.length == 1) return 1
for(i=0 ; i<s.length ; i++) {
map.set(s[i] , (map.get(s[i])||0) + 1)
count += 1
if(map.get( s[i] ) > 1) {
if(count > answer) {
answer = count -1
}
map.clear()
map.set(s[i] , 1)
count = 1
}
}
return answer
};
이렇게 코드를 짜니까 한번도 중복이 없는 경우나
중복을 만나지 않은 맨 끝 케이스가 제일 길경우 if문에 안걸려서 멸망했습니다.
🔍나의 또 실패한 풀이
var lengthOfLongestSubstring = function(s) {
let set = new Set()
let count = 0
let answer = 0
if(s.length == 1) return 1
for(i=0 ; i<s.length ; i++) {
if(set.has(s[i])) {
answer = Math.max(answer , count)
count = 0
set.clear()
}
set.add(s[i])
count += 1
}
return (answer >= count) ? answer : count
};
이렇게 짜니까 dvdf 케이스에서 망함
vdf 로 3이 나와야하는데
df만 세서 2가 반환되어버리네요
🔍다른사람의 풀이
var lengthOfLongestSubstring = function (s) {
let set = new Set();
let left = 0;
let maxSize = 0;
if (s.length === 0) return 0;
if (s.length === 1) return 1;
for (let i = 0; i < s.length; i++) {
while (set.has(s[i])) {
set.delete(s[left])
left++;
}
set.add(s[i]);
maxSize = Math.max(maxSize, i - left + 1)
}
return maxSize;
}
for문안에 반복문을 하나 더넣어서
모든 인덱스를 기점으로 값을 세면 해결할 수 있군용..
반응형
'leetcode' 카테고리의 다른 글
169. Majority Element 자바스크립트 (0) | 2023.01.07 |
---|---|
49. Group Anagrams 자바스크립트 (0) | 2023.01.07 |
442. Find All Duplicates in an Array 자바스크립트 (1) | 2023.01.07 |
409. Longest Palindrome 자바스크립트 (0) | 2022.12.19 |
66.plus One (0) | 2022.11.29 |