[LeetCode] 5. Longest Palindromic Substring (Java)

2023. 1. 2. 07:11알고리즘/LeetCode

Description

Given a string s, return the longest palindromic substring in s.

 

string s에서 가장 긴 거꾸로 읽어도 같은 substring을 구하라.

 

Example 1:

Input: s = "babad"
Output: "bab"
Explanation: "aba" is also a valid answer.

Example 2:

Input: s = "cbbd"
Output: "bb"

 

Constraints:

  • 1 <= s.length <= 1000
  • s consist of only digits and English letters.

 

Solution

class Solution {
    public String longestPalindrome(String s) {
        String max="";
        int times=0;
        int length=s.length();
        
        for(int i=0;i<length;i++){
            if(length-1-i>i){
                times=i;
            }else{
                times=length-1-i;
            }
            
            String temp = String.valueOf(s.charAt(i));
            
            //가운데가 외자로 시작할 경우
            for(int j=1;j<times+1;j++){
                if(s.charAt(i-j)==s.charAt(i+j)){
                    temp = String.valueOf(s.charAt(i-j)) + temp + String.valueOf(s.charAt(i+j));
                }else{
                    break;
                }
            }
            
            if(temp.length()>max.length()){
                max=temp;
            }
        
            temp = "";
            
            //가운데가 외자 없이 시작할 경우
            for(int j=0;j<times+1;j++){
                if(length>i+j+1){
                    if(s.charAt(i-j)==s.charAt(i+j+1)){
                        temp = String.valueOf(s.charAt(i-j)) + temp + String.valueOf(s.charAt(i+j+1));
                    }else{
                      break;
                    }
                }
            }
            
            if(temp.length()>max.length()){
                max=temp;
            }
            
        }
        return max;
    }
}

모든 문자열을 for문으로 탐색하며 가운데에 외자가 있을 경우와 없을 경우로 나눠서 값을 구하도록 구성했다.