هغه ټکي ومومئ چې د کریکټ لیټکوډ حل لخوا رامینځته کیدی شي


مشکل کچه په اسانۍ سره
په مکرر ډول دننه پوښتل کیږي ترلاسه کړئ Amazon
پیشه ځورول

د ستونزې بیان

په ستونزه کې "هغه ټکي ومومئ چې د شخصیتونو لخوا رامینځته کیدی شي" موږ ته د تارونو یو لړ راکړل شوي چې د ټیټ قضیې انګلیسي الفبا لري (ټکي) او د تار چې د حرفونو مجموعه لري (چارس).

زموږ دنده دا ده چې په صف کې د هر تار لپاره پلټنه وکړئ که چیرې دا د کرکټرونو د کرکټرونو په کارولو سره رامینځته شي (موږ کولی شو د چیر هر کرکټر یوازې یو ځل وکاروو). په نهایت کې ، موږ اړتیا لرو د ټولو تارونو اوږدوالي اندازه بیرته راولو چې کوم چې د چار سټینګ د کرکټرونو په کارولو سره رامینځته کیدی شي.

بېلګه

words = ["hello","world","tutorialcup"], chars = "welldonehoneyr"
10

وضاحت:

هغه ټکي ومومئ چې د کریکټ لیټکوډ حل لخوا رامینځته کیدی شي

پدې مثال کې ، موږ کولی شو د چارس سټینګ د کرکټرونو په کارولو سره هیلو او نړۍ جوړه کړو. نو د هیلو او نړۍ ټول اوږدوالی 5 + 5 = 10 دی.

د ټکو موندلو لپاره تګلاره چې د کریکټ لیټکوډ حل لخوا رامینځته کیدی شي

د دې ستونزې د حل لپاره موږ به د فریکونسي صف وکاروو او دا به په سټینګ کې د موجودو کرکټرونو حساب وساتي. موږ به د ستونزې حل کولو لپاره دا ګامونه تعقیب کړو:

  1. د فریکونسۍ صف جوړ کړئ او د چارس سټینګونو د فریکونسۍ ذخیره کړئ.
  2. اوس د کلمو هر سری یو له یو څخه چیک کړئ.
    1. د فریکونسي صف یوه کاپي جوړه کړئ.
    2. اوس د ټاکل شوي تار هر کرکټر وګورئ. که چیرې د فریکونسۍ صف کې د کرکټر فریکوینسي له 1 څخه لږ وي نو بیا موږ نشو کولی د کراس تورو د کرکټرونو په کارولو سره یو ټاکل شوی تار رامینځته کړو نور د کریکټ فریکونسۍ د 1 لخوا کموئ.
    3. که چیرې د کرس تارونو په کارولو سره تار جوړ کړئ نو بیا په پایله کې د ټاکل شوي تار اوږدوالی اضافه کړئ.
  3. د پایلې ارزښت بیرته راګرځئ.

تطبیق

C ++ کوډ د هغه ټکو ومومئ چې د کرکټرونو لخوا رامینځته کیدی شي

#include <bits/stdc++.h> 
using namespace std; 
int countCharacters(vector<string>& words, string chars) {
  vector<int> cnt(26);
  int res = 0;
  for (auto ch : chars) ++cnt[ch - 'a'];
  for (auto w : words) {
    vector<int> cnt1 = cnt;
    bool match = true;
    for (auto ch : w) {
      if (--cnt1[ch - 'a'] < 0) {
        match = false;
        break;
      }
    }
    if (match) res += w.size();
  }
  return res;
}

int main() 
{ 
    vector<string> words {"hello","world","tutorialcup"};
    string ch="welldonehoneyr";
    int ans=countCharacters(words,ch); 
    cout<<ans<<endl;
    return 0;
}
10

د ټکي موندلو لپاره جاوا کوډ چې د حروف لخوا رامینځته کیدی شي

import java.util.Arrays;
import java.util.Set ;
import java.util.HashSet;
import java.util.*; 
public class Tutorialcup {
public static int countCharacters(String[] words, String chars) {
        int[] count = new int[26];
        int res = 0;
        
        for (char ch : chars.toCharArray()) {
            count[ch - 'a']++;
        }
        
        for (String word : words) {
            int[] temp = count.clone();
            boolean match = true;
            
            for (char ch : word.toCharArray()) {
                if (--temp[ch - 'a'] < 0) {
                    match = false;
                    break;
                }
            }
            
            if (match) {
                res += word.length();
            }
        }
        
        return res;
    }
  public static void main(String[] args) {
        String[] words={"hello","world","tutorialcup"};
        String ch="welldonehoneyr";
        int ans=countCharacters(words,ch); 
        System.out.println(ans);
  }
}
10

د موندلو ټکو پیچلتیا تحلیل چې د کریکټ لیټکوډ حل لخوا رامینځته کیدی شي

د وخت پیچلتیا

د پورتنۍ کوډ وخت پیچلتیا ده O (n * م) ځکه چې موږ د ټولو ټکو هر کرکټر تعقیبوو. دلته n د ورکړل شوي سرې اوږدوالی دی او م د ورکړل شوي صفونو مزي اوږدوالي دي.

د ځای پیچلتیا

د پورتنۍ کوډ د ځای پیچلتیا ده O (1) ځکه چې موږ یوازې د ځواب ذخیره کولو لپاره تغیر ورکوو.

ماخذونه