LeetCode - 28. Find the Index of the First Occurrence in a String

henu·2023년 8월 24일
0

LeetCode

목록 보기
13/186
post-thumbnail

Problem

두 문자열 needlehaystack이 주어질때, haystack에서 needle이 처음으로 등장하는 인덱스를 리턴하라. 등장하지 않으면 -1를 리턴하라.

Example 1

Input: haystack = "sadbutsad", needle = "sad"
Output: 0
Explanation: "sad" occurs at index 0 and 6.
The first occurrence is at index 0, so we return 0.

Example 2

Input: haystack = "leetcode", needle = "leeto"
Output: -1
Explanation: "leeto" did not occur in "leetcode", so we return -1.

Solution

var strStr = function(haystack, needle) {

    for(let i=0; i<haystack.length; i++) {
        if(haystack[i] === needle[0]) {
            for(let j=0; j<needle.length; j++) {
                if(haystack[i+j] !== needle[j]) {
                    break;
                } else if(j === needle.length - 1) {
                    return i;
                }
            }
        }
    }

    return -1;
};

Explanation

indexOf 메소드를 사용하면 간단하고 쉽게 한 줄로 해결되지만 문제의 태그 중에 Two Pointers가 있어 빌트인 메소드를 사용하지 않고 풀어보았다.

  • i 포인터는 needle의 첫 글자와 비교하기 위해 haystack의 글자를 순서대로 가리키는 포인터이다.
  • j 포인터는 needle의 남은 글자와 비교하기 위해 needle의 글자를 순서대로 가리키는 포인터이다.

for문을 이용해 haystack의 글자 하나하나를 needle의 첫 글자와 비교한다.
일치할 경우, 다시 for문을 이용해 needle의 남은 글자와 haystack의 다음 글자를 비교한다.
여기서 불일치할 경우, 그 즉시 break문을 사용해 for문을 탈출한다. 그 뒤의 글자는 비교할 필요가 없기 때문이다.
모두 일치할 경우 j의 값과 needle의 길이가 일치해지기 때문에 i를 리턴하면 된다.

0개의 댓글