상세 컨텐츠

본문 제목

647. Palindromic Substrings

Developer/LEETCODE

by cepiloth 2021. 9. 12. 19:10

본문

728x90
반응형

https://leetcode.com/problems/palindromic-substrings/

 

Palindromic Substrings - 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

문제

문자열에서 회문을 찾아라.

 

int dp[1010][1010] = { 0 };
int countSubstring(string s) {
    int ans = 0;
    // 한글자 처리
    for (int i = 0; i < s.size(); ++i) {
        dp[i][i] = 1;
        ans++;
    }
    // 두글자 처리
    for (int i = 0; i < s.size() - 1; ++i) {
        if (s[i] == s[i + 1]) {
            dp[i][i + 1] = 1;
            ans++;
        }
    }

    // 세글자 이상부터
    for (int sz = 3; sz <= s.size(); ++sz) {
        for (int i = 0; i < s.size(); ++i) {
            int begin = i;
            int end = i + sz - 1;
            if (end >= s.size()) continue;
            if (dp[begin + 1][end - 1] == 1 && (s[begin] == s[end])) {
                dp[begin][end] = 1;
                ans++;
            }
        }
    }
    // 최초 회문이 있는 인덱스를 리턴하려면 어떻게 할까요?
    int sol = 0;
    for (int i = 0; i < s.size(); i++) {
        for (int j = 0; j < s.size(); j++) {
            if (dp[i][j]) {
                //cout << dp[i][j] << endl;
                return i;
                //return s[i];
            }
        }
    }

    // 가장 긴 회문을 구하시오? 반환값 시작지점인지, 문자열인지 구체적인 질문
    // 크기를 반환할 것인가?

    // 가장큰 길이를 구하시오

    int sol = 0;
    for (int left = 0; left < s.size(); ++left)
        for (int right = left; right < s.size(); ++right) {
            int sz = right - left + 1;
            if (dp[left][right] == 1)
                sol = max(sol, sz);
        }

    return ans;
}
// O(n^2)
// 개선된 알고리즘 manacher

 

https://velog.io/@jjj7061/Manachers-Algorithm

 

Manacher's Algorithm

팔린드롬DP를 사용한 팔린드롬 찾기Manacher's Algorithm우리나라 말로 하면 회문입니다.'기러기'와 같이 앞뒤가 같은 단어를 뜻합니다.주어진 단어가 회문인지를 검사하는 것이 아닌 주어진 문자열

velog.io

 

728x90
반응형

'Developer > LEETCODE' 카테고리의 다른 글

2028. Find Missing Observations  (0) 2021.10.03
2027. Minimum Moves to Convert String  (0) 2021.10.03
594. Longest Harmonious Subsequence  (0) 2021.09.08
682. Baseball Game  (0) 2021.09.08
575. Distribute Candies  (0) 2021.09.08

관련글 더보기

댓글 영역