https://leetcode.com/problems/longest-substring-without-repeating-characters/
Given a string
s, find the length of the longest substring without repeating characters.
주어진 문자열을 가지고, 반복되는 문자가 없는 가장 긴 문자열을 구하라.
연속된 문자열 중에서 반복되는 문자가 없는 가장 긴 문자열을 구하는 것이 문제의 목표이다.
abcabcbb
abc, 길이는 3
bbbbb
b, 길이는 1
pwwkew
wke, 길이는 3
구하는 것은 부분 문자열(substring)이라는 것을 주의해야한다.
var lengthOfLongestSubstring_failed = function(s) {
let stack = [], count = 0;
for (let i = 0; i < s.length; i++) {
const element = s[i];
if (stack.indexOf(element) > -1) {
break;
}
stack.push(element);
count++;
}
return count;
};
항상 인덱스 0부터 문자열을 만들기 때문에 pwwkew의 경우, 값이 2가 됨.
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
let maxStr = '', maxLen = 0, currIdx = 0;
for (let i = 0; i < s.length; i++) {
const element = s[i];
currIdx = maxStr.indexOf(element);
if (currIdx > -1) {
maxStr = maxStr.substring(currIdx + 1);
}
maxStr += element;
maxLen = Math.max(maxLen, maxStr.length);
}
return maxLen;
};
다음 코드에서
반복 문자가 있으면 반복 문자 이후로 다시 문자열을 세팅한다.
if (currIdx > -1) {
maxStr = maxStr.substring(currIdx + 1);
}