문제 링크
난이도 : Lv. 0

문제 내용

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


제한사항

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

입출력 예

myStringpatresult
”AbCdEFG""dE""AbCdE"
"AAAAaaaa""a""AAAAaaaa”

문제 분석

뒤에서부터 찾으면 될듯

작성한 코드

#include <string>
#include <vector>
 
using namespace std;
 
string solution(string myString, string pat) {
    int endIdx = -1;
    for(int i = myString.size() - 1; i>-1; i--){
        if(endIdx != -1) break;
        if(myString[i] == pat.back()){
            for(int j = 0; j < pat.size(); j++){
                if(myString[i-j] != pat[pat.size() - j - 1]) break;
                else if(j == pat.size() - 1) {
                    endIdx = i;
                }
            }
        }
    }
    
    string answer = myString.substr(0, endIdx + 1);
    return answer;
}

우수 코드 분석

#include <string>
#include <vector>
 
using namespace std;
 
string solution(string myString, string pat) {
    return myString.substr(0, myString.rfind(pat)+pat.length());
}

find(탐색 문자열, 인덱스 = 0) : 탐색 문자열을 앞에서부터 검색함

rfind(탐색 문자열, 인덱스 =npos) : 탐색 문자열을 뒤에서부터 검색함

못찾으면 -1