ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 5. Longest Palindromic Substring
    Programming/leetcode 2021. 1. 25. 15:30
    728x90

    문자열의 부분중 가장 긴 회문 찾기 문제이다. 

    Dynamic Programming(이하 DP)으로 많이 풀지만, 이번에는 window sliding기법을 이용해서 풀어보자. 

    사실 DP로 푸는 것은 잘 이해가 되지 않았다..

    더보기

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

    아이디어는 이렇다. 

    현재 위치를 중심으로 양 옆을 늘려가면서 회문인지 확인하는 것이다. 

     

    ex) 'abac'에서 위치를 찾아보자. 두번째 'b'의 위치에서 보자

    b를 중심으로 양 옆에 'a'가 있고, 'aba'는 회문이 된다. 

     

    하지만 이 아이디어에서 조심해야될것이 중심을 홀수, 짝수를 구분해야된다는 것이다.

     

    이유는 홀수, 짝수 일때 중심이 달라지기때문이다.

     

        def longestPalindrome(self, s: str) -> str:
            def searchPalindrome(left, right):
                length = len(s)
                
                # 범위 확인과 양쪽 끝값이 같으면 범위 확장
                while left >=0 and right < length and s[left] == s[right]:
                    left -= 1
                    right += 1
                # 마지막에 확장한 범위를 하나 줄여서 값을 구한다.
                return s[left+1:right]
    
            # 들어온 입력값이 2 이하이면 회문을 구할 필요도 없지!
            if len(s)<2:
                return s
            result = ""
            for i in range(len(s)):
                # 홀수 
                s1 = searchPalindrome(i,i)
                # 짝수
                s2 = searchPalindrome(i,i+1)
                
                # 더 긴 것을 채택 
                if len(result) < len(s1):
                    result = s1
                if len(result) < len(s2):
                    result = s2
            return result

     

    'Programming > leetcode' 카테고리의 다른 글

    23. Merge k Sorted Lists  (0) 2021.01.26
    1437. Check If All 1's Are at Least Length K Places Away  (0) 2021.01.26
    49. Group Anagrams  (0) 2021.01.21
    819. Most Common Word  (0) 2021.01.21
    937. Reorder Data in Log Files  (0) 2021.01.21
Designed by Tistory.