Description
양쪽 어디부터 읽어도 같은 대칭 문자열(Palindrome)이 될 수 있도록 만들기 위해 몇번째 문자를 제거해야하는지 찾아 반환하는 문제입니다.
Solution 1. Two Pointers
public static int palindromeIndex(String s) {
// Write your code here
int len = s.length();
int start = 0;
int end = len-1;
while(start < end){
if(s.charAt(start) != s.charAt(end)){
break;
}
start++; end--;
}
if(start >= end) return -1;
int i = start;
int j = end;
start++;
while(start < end){
if(s.charAt(start) != s.charAt(end)){
return j;
}
start++; end--;
}
return i;
}
먼저 두개의 포인터를 이용해 양쪽 끝에서부터 값이 달라지는 위치를 찾습니다.
그리고 두 값중 어떤 값을 반환해야하는지 찾기위해 왼쪽값을 제거하고 해당 위치부터 Palindrome문자열이 되는지 검증하고 아니라면 해당값의 인덱스를 반환 아닐 경우 처음 찾았던 값중 오른쪽 값의 인덱스를 반환해 줍니다.
Reference
'알고리즘 > HackerRank' 카테고리의 다른 글
[HackerLank] Recursive Digit Sum - 문제풀이 (0) | 2022.03.25 |
---|---|
[HackerLank] Grid Challenge - 문제풀이 (0) | 2022.03.16 |
[HackerLank] Caesar Cipher - 문제풀이 (0) | 2022.03.16 |
[HackerLank] Tower Breakers - 문제풀이 (0) | 2022.03.15 |
[HackerLank] Zig Zag Sequence - 문제풀이 (0) | 2022.03.15 |