코딩테스트

409. Longest Palindrome

nayoon 2024. 2. 17. 08:14

https://leetcode.com/problems/longest-palindrome/description/

 

LeetCode - The World's Leading Online Programming Learning Platform

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

 

 

/**
    1. 문제 해석하기
    가장 긴 palindrome 만들기
    2. 문제 풀이 방향
    홀수는 한개(가장 긴 홀수를 찾아야함)
    짝수는 전부
    하면 무조건 palindrome을 만들 수 있을 것 같음.
 */
class Solution {
    public int longestPalindrome(String s) {
        Map<Character, Integer> map = new HashMap<>();
        int result = 0;
        boolean flag = false;
        int max = 0;

        for(int i = 0; i < s.length(); i++) {
            char temp = s.charAt(i);
            map.put(temp, map.getOrDefault(temp, 0) + 1);
        }

        for(Character c: map.keySet()) {
            if (map.get(c) % 2 == 0) {
                result += map.get(c);
                System.out.println(c + ", " + map.get(c));
            } else {
                flag = true;
                if (map.get(c) > 1) {
                    result += map.get(c) - 1;
                }
            }
        }
        if (flag) 
            result += 1;

        return result;
    }
}

 

Map이 아니라 a~Z까지만 나오는 거라서 int나 char로도 풀 수 있다는 것을 1등의 풀이를 통해서 알게되었다..

좀 변경해보겠다.

 

동일한 로직이었는데 int[]로 푸니 아래와 같이 시간이 단축되었다.

 

2ms

/**
    1. 문제 해석하기
    가장 긴 palindrome 만들기
    2. 문제 풀이 방향
    홀수는 한개(가장 긴 홀수를 찾아야함)
    짝수는 전부
    하면 무조건 palindrome을 만들 수 있을 것 같음.
 */
class Solution {
    public int longestPalindrome(String s) {
        int[] count = new int[128];
        int result = 0;
        
        for(int i = 0; i < s.length(); i++) {
            count[s.charAt(i) - 'A']++;
        }
        boolean flag = false;
        for(int c: count) {
            if (c == 0) {
                continue;
            }

            if (c % 2 == 0) {
                result += c;
            } else {
                result += c - 1;
                flag = true;
            }
        }
        if (flag) {
            result += 1;
        }
        return result;
    }
}

'코딩테스트' 카테고리의 다른 글

283. Move Zeroes  (0) 2024.02.17
100. Same Tree  (0) 2024.02.17
9. Palindrome Number  (0) 2024.02.16
234. Palindrome Linked List  (0) 2024.02.16
14. Longest Common Prefix  (0) 2024.02.14