28. 문자열에서 처음 나타나는 인덱스 찾기
두 개의 문자열 haystack과 needle에 대해 haystack에서 needle이 처음 나타나는 인덱스를 반환하거나, needle이 haystack의 일부가 아닌 경우 -1을 반환합니다.
예 1:
입력: haystack=”sadbutsad”, needle=”sad”
출력: 0
설명: “sad”는 인덱스 0과 6에서 발생합니다.
첫 번째는 인덱스 0에서 발생하므로 0을 반환합니다.
예 2:
입력: haystack=”leetcode”, needle=”leeto”
출력: -1
설명: “leeto”가 “leetcode”에 없기 때문에 -1을 반환합니다.
문제를 해결하다
1. 건초더미와 바늘, 두 개의 끈으로 건초더미에서 바늘이 돌아옵니다.
문제는 첫 번째 발생의 인덱스를 반환하는 것입니다. \*건초 더미에 바늘이 없으면 -1이 반환됩니다.사고 방식
1. 먼저 바늘이 빈 문자열인지 확인합니다. 비어 있으면 0을 반환합니다.
2. 건초더미 줄을 통과하여 다음 단계를 완료합니다.
A. needle의 첫 번째 문자가 현재 인덱스에서 haystack의 하위 문자열과 일치하는지 확인합니다.
B. 첫 번째 문자가 일치하면 찾은 변수에 true를 삽입합니다. 두 번째 루프로 이어지는 문자도 일치하는지 확인합니다. 일치하지 않는 문자열이 발견되면 발견된 변수가 false로 설정됩니다.
C. 모든 문자가 일치하면 현재 색인이 반환됩니다.
3. 모든 인덱스를 순회한 후 일치하는 하위 문자열이 없으면 -1이 반환됩니다.
코드 작성
function strStr(haystack, needle) {
//needle 문자열이 비어있을경우 0 리턴
if(needle.length === 0) {
return 0;
}
for(let i = 0; i <= haystack.length - needle.length; i++) {
if(haystack(i) === needle(0)) {
let found = true;
for(let j = 1; j < needle.length; j++) {
//needle의 두번째 문자열부터 마지막문자열까지 돌면서 판별
if(haystack(i + j) !== needle(j)) {
found = false;
break;
}
}
//found가 true면 문자열이 일치하는 것이므로 i를 리턴
if(found) {
return i;
}
}
}
return -1; //for문을 다 돌았는데도 일치하는 문자열이 없으면 -1을 리턴
}
let haystack = "leetcode",
needle = "leeto";
console.log(strStr(haystack, needle));
찾은 변수가 첫 번째 for에서 선언된 이유는 무엇입니까?
첫 번째 for 문 내에서 haystack(i) === needle(0) 조건이 충족되면 찾은 변수가 true로 설정되고,
두 번째 for 문을 입력합니다. 두 번째 for 문에서 바늘의 다른 모든 문자가 일치하는지 확인합니다.
일치하는 항목이 없으면 found가 false로 설정되고 두 번째 for 문이 종료됩니다.
첫 번째 for 문이 계속되면서 발견된 변수는 다음 인덱스에서 true로 다시 초기화되고 같은 과정이 반복된다.
이러한 방식으로 각 인덱스에 대해 정확히 일치하는 문자열을 결정할 수 있습니다.