처음에 maxLen 업데이트 코드를 잘못 배치했는데 샘플 데이터에서는 잘 돌아가서 그대로 제출했었다.
결국 2번 실패 끝에야 통과... 만약 실제 테스트였으면 고대로 0점이었겠지...
코드 작성 전에 귀찮더라도 알고리즘을 다시 생각해보고, 샘플 데이터를 몇개 더 추가해보자! ✊
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
sLen = len(s)
if not sLen:
return 0
maxLen = 1
front, rear = 0, 1
charSet = set(s[:1])
while rear < sLen:
currChar = s[rear]
if currChar in charSet:
# maxLen 업데이트
maxLen = max(maxLen, rear - front)
# set 업데이트
while s[front] != currChar:
charSet.remove(s[front])
front += 1
front += 1
else:
# set 추가
charSet.add(currChar)
rear += 1
maxLen = max(maxLen, rear - front)
return maxLen
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
const map = new Map();
const n = s.length;
let maxLen = 0;
let start = 0;
for (let i = 0; i < n; i++) {
if (map.has(s[i])) {
maxLen = Math.max(maxLen, i - start);
start = Math.max(start, map.get(s[i]) + 1);
}
map.set(s[i], i);
}
return Math.max(maxLen, n - start);
};