خپره شوې پر

د متن سره تړلو عام ننګونو سره مخ کېدل: د ټایپ سکریپټ کیسه

لیکوالان

ګیت هاب ریپوزیتوري: 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) ده، ځکه چې موږ عادي کرکټرونه په یوه آری کې ساتو. د بدترین حالت سناریو کې، چېرې چې ټول کرکټرونه په ټولو تارونو کې عادي وي، د دې آری اندازه د لومړي تار د اوږدوالي سره متناسب وي.

د ښه والي لارې

که څه هم زموږ حل د تارونو او کرکټرونو د متوسط شمیر لپاره کارآمد دی، د ښه والي لپاره تل ځای شته. د دې د فعالیت نوره لوړولو لپاره دلته څو ستراتیژۍ دي:

  1. لومړی ختمول: که په هر وخت کې یو کرکټر په ټولو تارونو کې په مساوي موقعیت کې سم نه وي، موږ کولی شو د لوپ څخه مخکې ودریږو، د بې ضروره پرتله کولو څخه مخنیوی وکړو.

  2. د لنډو تارونو لپاره ښه کول: د مرجع په توګه د لنډ ترین تار سره پیل کول کولی شي احتمالا د تکرار شمیر کم کړي، ځکه چې دا د چیک کولو لپاره د کرکټرونو د اعظمي شمیر کموي.

  3. متوازي پروسس: د لویو ډیټا سیټونو لپاره، د تارونو په مینځ کې د کرکټرونو د پرتله کولو لپاره د موازي پروسس تخنیکونو څخه کار اخیستل کولی شي د اجرا وخت په پام وړ کم کړي.

  4. د هشینګ تخنیکونه: د کرکټر موقعیتونو او ښکاره کېدو د تعقیب لپاره د هش میپ کارول کولی شي د عادي کرکټرونو د پیژندلو لپاره یو ډیر پیچلی لاره وړاندیز کړي، په ځانګړي توګه کله چې د تارونو د پراخو سیټونو سره معامله کیږي.

پای ته رسېدل

د عادي کرکټرونو چلېنج د تارونو د اداره کولو ستونزو د ښکلا یوه عالي شاهدي ده، د برنامه نویښتګرو ته بلنه ورکوي چې د الګوریتمونو او ډیټا جوړښتونو په نزاکتونو کې ډوب شي. د ټایپ سکرپټ په واسطه، موږ نه یوازې یوه حل وموند، بلکې د واضحتیا، د ټایپ امنیت، او د ستونزو د حل د اغیزمنۍ سفر هم منلو.

لکه څنګه چې موږ خپلې خبرې پای ته رسوو، دا مهمه ده چې په یاد ولرئ چې د پروګرامینګ چلېنجونو له لارې سفر د رسیدل شوي منزل په څیر د نیول شوي لارې په اړه هم دی. هر ستونزه، پشمول دې، د خپلو مهارتونو د ښه والي، د خپلو چلندونو د بیا فکر کولو، او له هرڅه مهم، د زده کړې د دوامدارۍ لپاره یوه بې ساري فرصت وړاندې کوي.