본문 바로가기

프로그래밍/Algorithm

Longest Palindromic Substring

Palindrome?
문자열을 거꾸로 해도 원래의 문자열과 같은 문자열

 

    public String longestPalindrome(String s) {

        if (s.length() == 0) {
            return "";
        }

        String result = "" + s.charAt(0);

        for (int i = 0; i < s.length() - 1; i++) {
            for (int j = s.length()-1; j > i; j--) {
                String newStr = s.substring(i, j+1);
                if (isPalindrome(newStr) && result.length() < newStr.length()) {
                    result = newStr;
                    if (s.equals(newStr)) {
                        return s;
                    }
                }
            }
        }
        return result;
    }

    private boolean isPalindrome(String s) {
        for (int i = 0; i < s.length() / 2; i++) {
            if (s.charAt(i) != s.charAt(s.length() - i - 1)) {
                return false;
            }
        }
        return true;
    }

3중 for문이라 성능이 아쉽다. 

특히 if (s.equals(newStr)) 은 땜빵... 

 

개선이 필요하다. 
(length 를 줄여가면서 str를 만들면 좋을 듯)