K Palindrome Strings LeetCode Həllini qurun

Çətinlik səviyyəsi Mühit
Tez-tez soruşulur ÜberBaxılıb 59

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Problem bəyanat

K Palindrom Sətirlərini qurun LeetCode Həlli – Sətir verilmişdir s və tam ədəd k, qayıt true bütün simvollardan istifadə edə bilsəniz s inşa etmək k palindrom simləri və ya false əksinə.

Input: s = "annabelle", k = 2
Output: true
Explanation: You can construct two

bütün simvollardan istifadə edən palindromlar

 in s.
Some possible constructions "anna" + "elble", "anbna" + "elle", "anellena" + "b"

Izahat

Hiylə, tək sayda baş verən simvolların hər dəfə bir simvoldan ibarət və ya sətirin ortasında mövcud olan ayrı bir palindromik sətir meydana gətirəcəyini başa düşməkdir. Beləliklə, əgər tək simvolların sayı k-dan çox olarsa, biz yalanı qaytarırıq və eyni şəkildə təqib edirik.

Həmçinin s-də simvolların sayı k-dan azdırsa, ondan k palindromik sətir yaratmaq heç bir şəkildə mümkün deyil.

Bütün digər hallar üçün k-ni edə bilərik palindromik simlər.

Tək tezlikli simvolu sayın(countd)
if(countodd<=k) doğru qaytarır;
daha
yalan qayıt

Kodu

K palindrom sətirlərinin qurulması üçün C++ kodu

class Solution {
public:
    bool canConstruct(string s, int k) {
        unordered_map<char,int> freq;
        for(char ch:s)
        {
            freq[ch]++;
        }
        int oddCount=0;
        for(auto pr:freq)
        {
            if(pr.second%2)
            {
                oddCount++;
            }
        }
        return oddCount<=k&&k<=s.length();
    }
};

K Palindrom sətirlərinin qurulması üçün Java kodu

class Solution {
    public boolean canConstruct(String s, int k) {
        int n = s.length();
        if (n==k) return true;
        else if (n<k) return false;
        int [] cnt = new int[26];
        for (int i = 0; i<n; i++) cnt[s.charAt(i)-'a']++;
        int odd_chars = 0;
        for (int i = 0; i<26; i++) {
            if (cnt[i]==0) continue;
            if (cnt[i]%2!=0) odd_chars++;
        }
        if (odd_chars>k) return false;  
        else return true;
    }
}

K Palindrom sətirlərinin qurulması üçün Python kodu

class Solution:
    def canConstruct(self, s: str, k: int) -> bool:
        count = collections.Counter(s)
        odd = 0
        for i in count:
            if count[i] % 2:
                odd += 1
                if odd > k:return False
        return len(s) >=  k

Construct K Palindrome Strings LeetCode Həlli üçün Mürəkkəblik Təhlili

Zamanın mürəkkəbliyi

O(N) çünki onun sayını hesablamaq üçün hər bir simvola baş çəkməliyik.

Kosmik Mürəkkəblik

O(N) biz saxlayırıq hesh-xəritədə və ya tezlik massivindəki simvolların tezlikləri ona görə də O(n) yerini tutacaq.

Referans: https://en.wikipedia.org/wiki/Palindrome

Crack Sistemi Dizayn Müsahibələri
Translate »