[프로그래머스/181872] 특정 문자열로 끝나는 가장 긴 문자열 찾기
in Study / Coding Test
☑️ 문제
☑️ 풀이
첫 번째 풀이
- 먼저
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