세 개의 인수를 받는 String.prototype 함수를 작성해야 한다고 가정해 보겠습니다.
- 첫 번째 인수는 하위 문자열을 검색해야 하는 문자열입니다.
- 두 번째 인수는 제거할 문자열의 발생 문자열입니다.
- 세 번째 인수는 n, 문자열에서 제거할 하위 문자열의 n번째 발생과 같은 숫자입니다.
문자열에서 subStr 제거에 성공하면 함수는 새 문자열을 반환해야 하고, 그렇지 않으면 모든 경우에 -1을 반환해야 합니다.
예시
다음은 코드입니다 -
const str = 'jkdsttjkdsre'; const subStr = 'jk'; const num = 2; removeStr = function(subStr, num){ if(!this.includes(subStr)){ return -1; } let start = 0, end = subStr.length; let occurences = 0; for(; ;end < this.length){ if(this.substring(start, end) === subStr){ occurences++; }; if(occurences === num){ return this.substring(0, start) + this.substring(end,this.length); }; end++; start++; } } String.prototype.removeStr = removeStr; console.log(str.removeStr(subStr, num));
이 함수는 먼저 다음을 확인합니다. subStr이 한 번도 나타나지 않으면 종료하고 -1을 반환해야 합니다.
그런 다음 슬라이딩 창 알고리즘을 사용하여 문자열에서 subStr의 발생 횟수를 기록합니다(창의 크기는 subStr의 길이와 동일함)
처음에는 가장 왼쪽 창에서 시작한 다음 창 끝이 원래 문자열의 끝에 도달할 때까지 창을 계속 슬라이딩합니다. 도중에 발생 횟수가 필요한 발생 횟수와 같으면 문자열에서 해당 항목을 잘라내고 이렇게 얻은 새 문자열을 반환합니다.
전체 문자열을 반복하는 경우 문자열에 subStr이 충분히 발생하지 않는다는 의미이며 이 경우 -1을 반환하고 함수를 종료해야 합니다.
마지막으로 문자열 함수로 호출할 수 있도록 removeStr 속성을 String.prototype에 추가합니다.
출력
이것은 콘솔에서 다음과 같은 출력을 생성합니다 -
jkdsttdsre