문제 링크
문제 요구 조건
- haystack 에서 needle이 포함되는지 확인
- 포함이 된다면 인덱스를 반환
- 포함이 안된다면 -1을 반환
나의 문제 풀이
이번 문제를 푸는 데에는
substring()
함수를 사용하는 것이 중요했다./** * @param {string} haystack * @param {string} needle * @return {number} */ var strStr = function (haystack, needle) { let index = -1; for (let i = 0; i < haystack.length; i++) { if (haystack[i] !== needle[0]) { continue; } const subString = haystack.substring(i, (needle.length + i)); if (subString === needle) { index = i; break; } } return index; };
- 반환 인덱스 값을 -1로 세팅
- for문으로 순회하면서 needle의 첫 글자랑 매칭 되는지 확인
- 매칭이 안되면 continue로 아래 로직을 실행하지 않고 다음 순회
- 매칭이 되면 substring으로 해당 지점에서 needle.length까지 텍스트 추출
- 텍스트 비교후 매칭이 되면 인덱스를 업데이트후 종료
정답 문제 풀이
다른 사람들의 문제를 푼 방식은 비슷했지만, 인덱스를 따로 사용하지 않고
-1
을 디폴트로 반환하고, 순회하며 매칭이 되는 조건에만 인덱스를 리턴을 하여, 코드가 좀 더 깔끔하고 효율적인 것을 확인할 수 있었다. /** * @param {string} haystack * @param {string} needle * @return {number} */ var strStr = function(haystack, needle) { let n = haystack.length; let m = needle.length; for (let i = 0; i <= n - m; i++) { if (haystack.substring(i, i + m) === needle) { return i; } } return -1; };