Задача палиндром наибольшей длины, полученный с помощью соединений из слов, состоящих из двух букв.

Задача палиндром наибольшей длины, полученный с помощью соединений из слов, состоящих из двух букв.

https://t.me/ai_machinelearning_big_data

Сложность: Средняя

Условие задачи: дан массив строк, каждый элемент которого состоит из двух букв английского алфавита в нижнем регистре. 

Необходимо создать палиндром наибольшей длины путем выбора некоторых элементов из массива строк и компаниовки их в любом порядке. Каждый элемент массива можно использовать не более одного раза. 

В ответе надо вернуть длину такого палидрома. 

Палиндром - строка, которая одинаково читаются слева направо и справа налево.

Пример:

Ввод: words = ["lc","cl","gg"]

Вывод: 6

Объяснение: lc" + "gg" + "cl" = "lcggcl" или же "clgglc", но оба имеют максимальную длину 6.  

Ввод: words = ["ab","ty","yt","lc","cl","ab"]

Вывод: 8 

Объяснение: "ty" + "lc" + "cl" + "yt" = "tylcclyt" или "lcyttycl"


Ввод: words = ["cc","ll","xx"]

Вывод: 2


Решение: 


Временная сложность: O(N)

Пространственная сложность: O(26*26)


class Solution {
public:
    int longestPalindrome(vector<string>& words) {
        int n = words.size();
        vector<vector<int>> counter(26,vector<int>(26,0));
        int ans=0;
        // for different letters in the word
        for(string s:words){
            int a = s[0]-'a'; // first letter
            int b = s[1]-'a'; // second letter
            // if the reverse of the word exists i.e like for "lc" if "cl" exists
            if(counter[b][a]) {
                ans+=4; // count increase by 2+2 = 4
                counter[b][a]--; // remove the occurance of the word from counter
            }
            else counter[a][b]++; // if original doesn't exits in counter array then increase in counter
        }
        // for same letters in the word
        for(int i=0;i<26;i++){
            if(counter[i][i]){ // if both the letters are same
                ans+=2; // increase by 2 i.e like for "gg" 
                break;
            }
        }
        return ans;
    }
};


Report Page