Algorithm/LeetCode

LeetCode 5. Longest Palindromic Substring

hhsaebom 2021. 1. 13. 15:57

문제 링크: leetcode.com/problems/longest-palindromic-substring/

 

Longest Palindromic Substring - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문제 요약: 가장 긴 Palindromic(앞뒤로 읽어도 같은문자)를 반환하시오.

 

문제 접근: 단순히 루프를 돌면서 앞뒤 char를 뽑아서 비교했다.

 

class Solution {
    public String longestPalindrome(String s) {
    	if (s.length() < 2) return s;
        
        // default 가장 긴 palindrome
        String result = "" + s.charAt(0);
        
        for (int i = 0; i < s.length(); i++) {
        	// 처음문자부터 시작하고,
            char first = s.charAt(i);
            // first로 시작하는 문자열중 palindrome인 문자를 담을 변수
            String temp = "";
            // 거꾸로 시작해서,
            for (int j = s.length()-1; j > i; j--) {
                char second = s.charAt(j);
                // 처음과 끝이 같다면 그 문자열을 추출해서 비교한다.
                if (first == second) {
                    String subString = s.substring(i, j+1);
                    boolean isPalindrome = this.checkPalindrome(subString);
                    // 처음에 찾는 문자가 가장 긴 문자열이므로 다음 루프는 하지 않는다.
                    if (isPalindrome) {
                        temp = subString;
                        break;
                    }
                }
            }
            // 가장 긴 문자를 체크하기 위해 비교
            if (temp.length() > result.length()) result = temp;
        }
        
        return result;
    }
    
    public boolean checkPalindrome(String s) {
        boolean result = true;

        for (int i = 0; i < s.length()/2; i++) {
            char first = s.charAt(i);
            char second = s.charAt(s.length()-1-i);
            if (first != second) {
                result = false;
                break;
            }
        }
        return result;
    }
}

ide에서 substring 자동완성을하면 substring(int beginIndex, int endIndex) 로 나와있어서, begin부터 end까지의 문자열을 뽑는줄알아서 틀렸었었다. (javadoc을 보면 beginIndex 포함, endIndex 불포함) 그래서 j+1로해야 원하는 대로 진행된다.