[프로그래머스/181872] 특정 문자열로 끝나는 가장 긴 문자열 찾기

☑️ 문제

프로그래머스 181872

☑️ 풀이

첫 번째 풀이

  • 먼저 myString 에서 pat 과 동일한 문자열은 모두 * 로 바꿨다.
  • 반복문을 사용하여 뒤에서부터 * 가 제일 처음 나온 인덱스를 구했고, substring 메서드를 사용하여 문자열을 잘랐다.
  • 더 쉬운 풀이가 있어서 다시 풀어보았다.
//시간: 0.25ms
//메모리: 75.4MB

class Solution {
    public String solution(String myString, String pat) {
        String answer = "";
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < pat.length(); i++) {
            sb.append("*");
        }
        String replaceStr = sb.toString();

        String str = myString.replace(pat, replaceStr);
        for (int i = str.length() - 1; i >= 0; i--) {
            if (str.charAt(i) == '*') {
                System.out.println(i);
                answer = myString.substring(0, i + 1);
                break;
            }
        }
        return answer;
    }
}

두 번째 풀이

  • lastIndexOf() 메서드를 이용하여 마지막으로 pat 이 시작하는 인덱스를 리턴받을 수 있었다.
//시간: 1.73ms
//메모리: 75.5MB

class Solution {
    public String solution(String myString, String pat) {
        String answer = "";
        int idx = myString.lastIndexOf(pat);
        answer = myString.substring(0, idx) + pat;
        return answer;
    }
}

☑️ 문법 정리 - 특정 요소의 인덱스 찾기

indexOf()

int indexOf(String str); // 특정 문자열이 처음 등장하는 인덱스 반환
int indexOf(String str, int fromIndex); // fromIndex부터 검색 시작
int indexOf(char c); // 특정 문자가 처음 등장하는 인덱스 반환
int indexOf(char c, int fromIndex); // fromIndex부터 검색 시작
  • 첫 번째로 등장하는 특정 문자열(또는 문자)의 인덱스를 반환한다.
  • 찾는 문자열이 존재하지 않으면 -1 을 반환한다.

예제

String text = "hello world";

System.out.println(text.indexOf("o"); // 4
System.out.println(text.indexOf("world"); // 6 ("world"가 시작되는 위치) 
System.out.println(text.indexOf("o", 5); // 7 (인덱스 5 이후의 'o'의 위치)
System.out.println(text.indexOf("z"); // -1 

lastIndexOf()

int lastIndexOf(String str); // 특정 문자열이 마지막으로 등장하는 인덱스 반환
int lastIndexOf(String str, int fromIndex); // fromIndex부터 거꾸로 검색 시작
int lastIndexOf(char c); // 특정 문자가 마지막으로 등장하는 인덱스 반환
int lastIndexOf(char c, int fromIndex); // fromIndex부터 거꾸로 검색 시작
  • 문자열 또는 문자의 마지막 등장 위치(인덱스)를 반환한다.
  • 뒤에서부터 찾지만 인덱스는 앞에서 세는 방식이다.
  • 찾는 문자열이 존재하지 않으면 -1 를 반환한다.

예시

String text = "hello world";

System.out.println(text.lastIndexOf("o"); // 7
System.out.println(text.lastIndexOf("world"); // 6 ("world"가 시작되는 위치) 
System.out.println(text.lastIndexOf("o", 6); // 4 (인덱스 6 이전의 'o'의 위치)
System.out.println(text.lastIndexOf("z"); // -1 

© 2021. All rights reserved.

yaejinkong의 블로그