- خپره شوې پر
د متن سره تړلو عام ننګونو سره مخ کېدل: د ټایپ سکریپټ کیسه
- لیکوالان
- نوم
- Imamuzzaki Abu Salam
- https://x.com/ImBIOS_Dev
https://github.com/ImBIOS/common-char-extractor-ts
ګیت هاب ریپوزیتوري:د پروګرامینګ انټرویو په ساحه کې، الګوریتمیک چلېنجونه نه یوازې د تخنیکي پوهې د آزموینې په توګه کار کوي، بلکې د کاندیدانو د ستونزو حل کولو وړتیا ته لیدنه هم ورکوي. یو له دې ډول په زړه پورې ستونزو څخه چې ډیری وختونه سره مخ کېږي، د تارونو د اداره کولو په اړه ده - د یوې برنامه نویښتګر په وسایلو کې یو بنسټیز مهارت. نن، موږ په یو په زړه پورې ستونزې کې ډوب شو: د څو تارونو په مینځ کې د عادي کرکټرونو پیژندل، او څنګه مو د ټایپ سکرپټ په کارولو سره د هغه حل ته رسیدلیو.
د چلېنج افشا کول
زموږ مخکې موجوده کار داسې ښکاریده چې ساده ده خو په حیرانتیا سره پیچلی: د تارونو یوه آری په نظر کې نیولو سره، موږ باید یو افکشن ولیکو چې د هغو کرکټرونو آری راوباسي او بیرته راګرځوي چې په ټولو تارونو کې په ورته موقعیت کې ښکاري. د مثال په توګه، د ["abcd", "bcd", "cde", "cdef"]
په ان پوت کې، د تمه شوي آوټ پوت ["c", "d"]
وي، دا معنی لري چې 'c' او 'd' هغه عادي کرکټرونه دي چې په ټولو تارونو کې په مساوي موقعیتونو کې شریک شوي دي.
د حل جوړول
زموږ سفر د ټایپ سکرپټ د حل لپاره د انتخاب سره پیل شو - یو تصمیم چې د ټایپ سکرپټ د ټایپ سیسټم په مټ رامنځته شو، د کوډ د اعتبار او د برنامه نویښتګر د تولیدیت د لوړولو په موخه. لومړی ګام د لومړي تار د هر کرکټر له لارې د تکرار کولو په اړه وه، د هغه په کارولو سره چې د وروسته تارونو سره د پرتله کولو لپاره یوه مرجع په توګه کار کوي.
/**
* د هغو کرکټرونو آری راوباسي او بیرته راګرځوي چې په ان پوت آری کې د ټولو تارونو په ورته موقعیت کې ښکاري.
*
* @param {string[]} words - د تحلیل کولو لپاره د تارونو آری.
* @returns {string[]} د هغو کرکټرونو آری چې د ټولو ورکړل شویو تارونو په مینځ کې عادي دي،
* د دوی په لومړي تار کې د ښکاره کېدو ترتیب ساتل.
*/
export function extractCommonLetters(words: string[]): string[] {
if (words.length === 0) {
return []
}
const copiedWords = [...words]
const result: string[] = []
const referenceWord = copiedWords[0]
// د لومړي تار په هر کرکټر تکرار کول
for (let i = 0; i < referenceWord.length; i++) {
const currentChar = referenceWord[i]
let isCharCommonAcrossWords = true
// د دې چیک کول چې ایا اوسنی کرکټر په هر یو بل تار کې موجود دی که نه
for (let j = 1; j < copiedWords.length; j++) {
const word = copiedWords[j]
const charIndex = word.indexOf(currentChar)
// که کرکټر وموندل نشي، ودریږئ او فلګ ته غلط ارزښت ورکړئ
if (charIndex === -1) {
isCharCommonAcrossWords = false
break
} else {
// د ډیپلیټونو د اداره کولو لپاره د موندل شوي کرکټر له تار څخه لرې کول
copiedWords[j] = word.slice(0, charIndex) + word.slice(charIndex + 1)
}
}
// که کرکټر په ټولو تارونو کې عادي وي، هغه نتیجه ته اضافه کړئ
if (isCharCommonAcrossWords) {
result.push(currentChar)
}
}
return result
}
دا ټوټه زموږ د چلند اصليت انکیپسول کوي، د ستونزې د حل لپاره د لوستلو وړتیا او ساده منطق ته ټینګار کوي.
له دې هاخوا ته سفر: د حل ازمول
د زموږ د حل د تصدیق لپاره، موږ د مختلف سناریوګانو پوښښ د ازموینې قضیو یوه سوټ کارولی - د اساسي قضیو څخه تر ډیر پیچلو قضیو پورې چې د ځانګړي کرکټرونو او د قضیه حساسیت سره معامله کوي. د دې بشپړې ازموینې زموږ د الګوریتم د ډیری ان پوتونو په مینځ کې د اعتبار او سموالي ډاډمن کړ.
د فضا او وخت د پیچلتا تحلیل
د تعمق په پایله کې، زموږ د حل د وخت پیچلتا په لومړي تار کې د کرکټرونو شمیر (راځئ دا د N
په نوم ونوموو) او د تارونو ټول شمیر (راځئ دا د M
په نوم ونوموو) له لارې ټاکل کیږي. د لومړي تار په هر کرکټر کې، موږ د هغه په ټولو نورو تارونو کې د مساوي موقعیت په مینځ کې د ښکاره کېدو چیک کوو، دا د O(N*M) د وخت پیچلتا ته لارښوونه کوي.
زموږ د حل د فضا پیچلتا O(N) ده، ځکه چې موږ عادي کرکټرونه په یوه آری کې ساتو. د بدترین حالت سناریو کې، چېرې چې ټول کرکټرونه په ټولو تارونو کې عادي وي، د دې آری اندازه د لومړي تار د اوږدوالي سره متناسب وي.
د ښه والي لارې
که څه هم زموږ حل د تارونو او کرکټرونو د متوسط شمیر لپاره کارآمد دی، د ښه والي لپاره تل ځای شته. د دې د فعالیت نوره لوړولو لپاره دلته څو ستراتیژۍ دي:
لومړی ختمول: که په هر وخت کې یو کرکټر په ټولو تارونو کې په مساوي موقعیت کې سم نه وي، موږ کولی شو د لوپ څخه مخکې ودریږو، د بې ضروره پرتله کولو څخه مخنیوی وکړو.
د لنډو تارونو لپاره ښه کول: د مرجع په توګه د لنډ ترین تار سره پیل کول کولی شي احتمالا د تکرار شمیر کم کړي، ځکه چې دا د چیک کولو لپاره د کرکټرونو د اعظمي شمیر کموي.
متوازي پروسس: د لویو ډیټا سیټونو لپاره، د تارونو په مینځ کې د کرکټرونو د پرتله کولو لپاره د موازي پروسس تخنیکونو څخه کار اخیستل کولی شي د اجرا وخت په پام وړ کم کړي.
د هشینګ تخنیکونه: د کرکټر موقعیتونو او ښکاره کېدو د تعقیب لپاره د هش میپ کارول کولی شي د عادي کرکټرونو د پیژندلو لپاره یو ډیر پیچلی لاره وړاندیز کړي، په ځانګړي توګه کله چې د تارونو د پراخو سیټونو سره معامله کیږي.
پای ته رسېدل
د عادي کرکټرونو چلېنج د تارونو د اداره کولو ستونزو د ښکلا یوه عالي شاهدي ده، د برنامه نویښتګرو ته بلنه ورکوي چې د الګوریتمونو او ډیټا جوړښتونو په نزاکتونو کې ډوب شي. د ټایپ سکرپټ په واسطه، موږ نه یوازې یوه حل وموند، بلکې د واضحتیا، د ټایپ امنیت، او د ستونزو د حل د اغیزمنۍ سفر هم منلو.
لکه څنګه چې موږ خپلې خبرې پای ته رسوو، دا مهمه ده چې په یاد ولرئ چې د پروګرامینګ چلېنجونو له لارې سفر د رسیدل شوي منزل په څیر د نیول شوي لارې په اړه هم دی. هر ستونزه، پشمول دې، د خپلو مهارتونو د ښه والي، د خپلو چلندونو د بیا فکر کولو، او له هرڅه مهم، د زده کړې د دوامدارۍ لپاره یوه بې ساري فرصت وړاندې کوي.