코딩기록

string) 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기 / match + 정규표현식, lastIndexOf(), slice 본문

프론트/JS)코딩테스트

string) 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기 / match + 정규표현식, lastIndexOf(), slice

뽀짝코딩 2024. 9. 23. 23:21
728x90

문제 설명

문자열 str과 part가 주어집니다. str의 부분 문자열중 part로 끝나는 가장 긴 부분 문자열을 찾아서 return 하는 solution 함수를 완성해 주세요.


제한사항

  • 5 ≤ str ≤ 20
  • 1 ≤ part ≤ 5
    • part은 반드시 str의 부분 문자열로 주어집니다.
  • str과 part에 등장하는 알파벳은 대문자와 소문자를 구분합니다.

입출력 예

str part result

"AbCdEFG" "dE" "AbCdE"
"AAAAaaaa" "a" "AAAAaaaa"

입출력 예 설명

입출력 예 #1

  • "AbCdEFG"에서 "dE"는 한 번 등장하며 처음부터 해당 위치까지 잘라내면 "AbCdE"가 됩니다. 따라서 이 문자열이 "dE"로 끝나는 가장 긴 문자열이며, "AbCdE"를 return 합니다.

입출력 예 #2

  • "AAAAaaaa"에서 "a"는 총 네 번 등장하며 이 중 가장 마지막에 있는 위치까지 잘라내면 "AAAAaaaa"가 됩니다. 따라서 이 문자열이 "a"로 끝나는 가장 긴 문자열이며, "AAAAaaaa"를 return 합니다.
const solution = (str, part) => {
	// do something
};

console.log(solution('AbCdEFG', 'dE')); // 'AbCdE'
console.log(solution('AAAAaaaa', 'a')); // 'AAAAaaaa'

 


풀이

1번 풀이 - for + lastIndexOf()

 

빈문자열 만들어놓고

part의 마지막 문자열 앞 인덱스(3, 4) + part.length(2, 1) = 5, 5

for문 i 두번 다 5보다 작으면 answer에 문자가 하나씩 더해진다. 

// 1번 풀이 for문 + lastIndexOf
const solution1 = (str, part) => {
  let answer = '';
  const lastIndex = str.lastIndexOf(part) + part.length;
  console.log(lastIndex);
  for (let i = 0; i < lastIndex; i++) {
    answer += str[i];
  }
  return answer;
};
console.log(solution1('AbCdEFG', 'dE')); // 'AbCdE'
console.log(solution1('AAAAaaaa', 'a')); // 'AAAAaaaa'

 

 

 

2번 풀이 - slice + lastIndexOf()

처음부터 part의 마지막인덱스 앞까지만 추출, + part

// 2번 풀이 slice + lastIndexOf
const solution2 = (str, part) => {
  return str.slice(0, str.lastIndexOf(part)) + part;
};
console.log(solution2('AbCdEFG', 'dE')); // 'AbCdE'
console.log(solution2('AAAAaaaa', 'a')); // 'AAAAaaaa'

 

 

3번 풀이 - match

정규표현식과 match를 이용한 방법

배열의 첫 번째 요소는 매칭된 전체 문자열.
이 방식은 문자열에서 특정 부분 문자열 part가 등장하는 위치까지의 모든 문자열을 추출할 때 사용.

// 3번 풀이 match
const solution3 = (str, part) => str.match(new RegExp('.*' + part))[0];
console.log(solution3('AbCdEFG', 'dE')); // 'AbCdE'
console.log(solution3('AAAAaaaa', 'a')); // 'AAAAaaaa'

 

 

 

참고

나, 쳇지피티

 

반응형
Comments