코딩/Javascript
Sliding Window
junhub
2023. 3. 17. 19:57
function solution(str1, str2) {
let i = 0;
let j = 0;
while (j < str2.length) {
if (str2[j] === str1[i]) {
i += 1;
}
//이때 i = 3
if (i === str1.length) {
return true;
}
j++;
// j = 0 [a] , i = 0[6]
// j = 1 [b] , i = 0[6]
// j = 2 [6] , i = 0[6]
// j = 3 [C] , i = 1[C]
// j = 4 [D] , i = 2[D]
// j = 5 [E] , i = 3[]
// j = 6 [4] , i = 3[]
// j = 7 [4] , i = 3[]
// j = 8 [3] , i = 3[]
// j = 9 [f] , i = 3[]
}
return false;
// window sliding
}
console.log(solution("hello", "wohelfkkorld"));
console.log(solution("6CD", "ab6CDE443fgh22iJKlmn1o"));
sliding window는 창문이 옮겨간다는 알고리즘 풀이 방식이다. 범위(창문)가 자동으로 옮겨가면서 조건에 해당하는 답을 반환하게 된다. 이 방법은 시간복잡도가 O(n)이며, 자주 활용되는 방식이다.
str1이 str2에 있는지를 확인해야 한다. 변수 i 와 변수 j 에 0을 할당한 후 while 반복문을 사용해 비교하려는 대상 즉, str2만큼 반복하게 한다. 이때 반복문 내에 j가 계속 증가할 수 있도록 j++ 을 써준다.
조건문을 사용해 str2[j] === str1[i]가 같다면 i가 1만큼 증가하게 한다. 이말은 str2의 j 번째 인덱스는 계속 증가하면서 str1의 i 번째 인덱스는 같은 값을 반복해서 비교하다가 둘이 같은 값이 나오면 str1 의 i + 1 번째 인덱스를 비교하게 되고 또 같다면 str i +1 +1 번째 인덱스를 비교하게 된다. 이렇게 되면 코드의 주석 내용과 같이 비교해서 같은 값이 나온만큼 i 의 숫자가 증가하게 되는데 이 숫자는 결국 str1 의 length 와 같으므로 둘을 비교해서 같은 값이라면 true를 리턴하게 하면 된다.