কম্পিউটার

পাইথনে প্রদত্ত সীমাবদ্ধতার অধীনে A থেকে স্ট্রিং B তৈরি করা সম্ভব কিনা তা পরীক্ষা করুন


ধরুন আমাদের দুটি স্ট্রিং আছে s এবং t, এবং দুটি মান p এবং q। আমাদের পরীক্ষা করতে হবে যে s থেকে t পাওয়া সম্ভব কি না যাতে s কে p অক্ষরগুলির গ্রুপে বিভক্ত করা হয় শেষ গ্রুপটি ছাড়া যেটিতে ≤ p অক্ষর থাকবে এবং আমরা প্রতিটি গ্রুপ থেকে সর্বাধিক q সংখ্যক অক্ষর বাছাই করতে পারি, এবং এছাড়াও t-এ অক্ষরের ক্রম অবশ্যই s-এর মতই হতে হবে।

সুতরাং, যদি ইনপুটটি s ="mnonnopeqrst", t ="moprst", p =5, q =2 এর মতো হয়, তাহলে আউটপুটটি True হবে কারণ আমরা "mnonn", "opeqr", "st" এর মতো বিভাগ তৈরি করতে পারি। , এখন "mnonn" এবং "opeqr" থেকে 2টি ক্যারেক্টার সাবস্ট্রিং "mo" এবং "pr" নিয়ে তারপর "st" ইতিমধ্যেই আছে তাই এই দুটি দৈর্ঘ্যের সাবস্ট্রিং ব্যবহার করে আমরা সহজ সংযোজন দ্বারা t তৈরি করতে পারি।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • temp :=একটি খালি মানচিত্র যেখানে সমস্ত কীগুলির জন্য খালি তালিকা রয়েছে
  • l :=s এর দৈর্ঘ্যের সমান আকারের একটি তালিকা এবং 0 দিয়ে পূরণ করুন
  • 0 থেকে s আকারের রেঞ্জের জন্য,
      করুন
    • টেম্পের শেষে i ঢোকান['a']
  • কম :=0
  • আমি 0 থেকে t - 1 এর পরিসরের জন্য, কর
    • সূচক :=তাপমাত্রা['a']
    • এটি :=সাজানো ক্রম বজায় রাখতে সূচক তালিকায় নিম্ন সন্নিবেশ করার জন্য সূচক
    • যদি এটি সূচকের আকারের সমান হয় - 1, তাহলে
      • মিথ্যে ফেরত দিন
    • count :=(index[it] / p) এর ভাগফল
    • l[count] :=l[count] + 1
    • যদি l[count]>=q হয়, তাহলে
      • গণনা :=গণনা + 1
      • কম :=গণনা * p
    • অন্যথায়,
      • নিম্ন :=সূচক[এটি] + 1
  • সত্য ফেরান

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

from bisect import bisect_left
from collections import defaultdict
def solve(s, t, b, m) :
   temp = defaultdict(list)
   l = [0] * len(s)
   for i in range(len(s)) :
      temp['a'].append(i)
   low = 0
   for i in range(len(t)) :
      indices = temp['a']
      it = bisect_left(indices, low)
      if it == len(indices) :
         return False
      count = indices[it] // b
      l[count] = l[count] + 1
      if l[count] >= m :
         count += 1
         low = count * b
      else :
         low = indices[it] + 1
   return True
s = "mnonnopeqrst"
t = "moprst"
p = 5
q = 2
print (solve(s, t, p, q))

ইনপুট

"mnonnopeqrst", "moprst", 5, 2

আউটপুট

True

  1. পাইথন - একটি প্রদত্ত স্ট্রিং বাইনারি স্ট্রিং কিনা তা পরীক্ষা করুন

  2. প্রদত্ত স্ট্রিংটি স্বরবর্ণ প্যালিনড্রোম কিনা তা পরীক্ষা করার জন্য পাইথন প্রোগ্রাম

  3. প্রদত্ত স্ট্রিং প্যানগ্রাম কিনা তা পরীক্ষা করার জন্য পাইথন প্রোগ্রাম

  4. প্রদত্ত স্ট্রিং থেকে সমস্ত সম্ভাব্য বৈধ আইডি ঠিকানা তৈরি করতে পাইথন প্রোগ্রাম