leetcode 214: Shortest Palindrome

Shortest Palindrome
Total Accepted: 172
Total Submissions: 1344
Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. Find and return the shortest palindrome you can find by performing this transformation.
For example:
Given "aacecaaa" , return "aaacecaaa" .
Given "abcd", return "dcbabcd". [사고방식]
어떤 char 부터 양쪽 으로 확장 (좌우 양쪽 문자 가 같 음) 합 니 다. 문자열 의 머리 까지 확장 할 수 있다 면 끝 에 남 은 reverse 를 원래 문자열 의 머리 에 추가 하면 됩 니 다.
tips:  1. 중축 문 자 는 중간 부터 선택 합 니 다. 이렇게 찾 은 것 이 가장 짧 은 것 입 니 다. 2. 중축 문 자 는 하나 일 수도 있 고 두 개 일 수도 있 습 니 다. 
[CODE]
public class Solution {
    public String shortestPalindrome(String s) {
    	if(s.length()<=1 ) return s;
        int center = (s.length()-1)/2;
        String res="";
        for(int i=center; i>=0; i--) {
        	if(s.charAt(i) == s.charAt(i+1)) {
        		if( (res = check1(s, i, i+1)) !=null) return res;
        	}
    		if( (res = check1(s, i, i)) !=null) return res;

        }
        return res;
    }
    //aabaac
    private String check1(String s, int l, int r) {
    	int i=1;
        for(; l-i>=0 && r+i<s.length(); i++) {
            if(s.charAt(l-i) != s.charAt(r+i) ) break;
        }
        
        if(l-i>=0) return null; 
        StringBuilder sb = new StringBuilder(s.substring(r+i));
        sb.reverse();
        return sb+s;
    }
}

좋은 웹페이지 즐겨찾기