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.
Mündəricat
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
