본문으로 바로가기

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

 

Palindrome Index | HackerRank

Determine which character(s) must be removed to make a string a palindrome.

www.hackerrank.com