최대 1 분 소요

문제 설명

프로그래머스 181872번 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기

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

제한 사항

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

입출력 예시

myString pat result
“AbCdEFG” “dE” “AbCdE”
“AAAAaaaa” “a” “AAAAaaaa”

입출력 예 설명 1

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

입출력 예 설명 2

  • “AAAAaaaa”에서 “a”는 총 네 번 등장하며 이 중 가장 마지막에 있는 위치까지 잘라내면 “AAAAaaaa”가 됩니다. 따라서 이 문자열이 “a”로 끝나는 가장 긴 문자열이며, “AAAAaaaa”를 return 합니다.

코드 구현

Python

def solution(myString: str, pat):
    myString = list(myString)
    myString.reverse()
    myString = "".join(myString)

    pat = list(pat)
    pat.reverse()
    pat = "".join(pat)
    
    slicedString = myString[myString.find(pat):]
    slicedString = list(slicedString)
    slicedString.reverse()

    return "".join(slicedString)

Java

class Solution {
    public String solution(String myString, String pat) {
        return myString.substring(0, myString.lastIndexOf(pat)) + pat;
    }
}

배운 점 - Python

  • rfind() 메서드를 활용하면 오른쪽에서부터 특정 문자가 있는지 찾을 수 있다.
def solution(myString, pat):
    return myString[:myString.rfind(pat) + len(pat)]