কম্পিউটার টিউটোরিয়াল

পাইথনে পছন্দের অপশন দিয়ে সব সম্ভাব্য স্ট্রিং জেনারেট করার প্রোগ্রাম


মান লক্ষ্য করুন আমাদের কাছে একটি স্ট্রিং s আছে যেটি ছোট হাতের আলফাবেট ক্যারেক্টার এবং অন্যান্য ক্যারেক্টার যেমন "[", "|", এবং "]" দিয়ে গঠিত। এখানে "[a|b|c]" নির্দেশ করে যে "a", "b", বা "c" - এই তিনটির যেকোনো একটি পছন্দ হিসেবে বেছে নেওয়া যায়। আমাদের কাজ হল এমন একটি স্ট্রিংের তালিকা খুঁজে বের করা যাতে s যেন প্রতিনিধিত্ব করতে পারে সে সব সম্ভাব্য মান থাকে। মনে রাখবেন "[]" নেস্টেড হতে পারে না এবং এতে যেকোনো সংখ্যক পছন্দ থাকতে পারে।

উদাহরণস্বরূপ, যদি ইনপুট হয় s = "[d|t|l]im[e|s]", তবে আউটপুট হবে ['dime', 'dims', 'lime', 'lims', 'time', 'tims']।

সমাধানের ধাপসমূহ:
  • যদি s খালি হয়, তবে খালি স্ট্রিংযুক্ত একটি তালিকা রিটার্ন করুন।
  • n := s এর আকার
  • seq := একটি নতুন তালিকা, res := একটি নতুন তালিকা
  • একটি helper() ফাংশন ডিফাইন করুন যা pos প্যারামিটার নেবে:
    • যদি pos হল n এর সমান, তবে seq এর সব এলিমেন্ট জয়েন করে res-এ ঢুকান।
    • অন্যথায়,
      • যদি s[pos:] সাবস্ট্রিং-এ "[" থাকে, তবে:
        • start := pos + s[pos:].index("[")
        • end := pos + s[pos:].index("]")
        • s[start+1:end] কে "|" দিয়ে স্প্লিট করে প্রতিটি option এর জন্য:
          • s[pos:start] কে seq-র শেষে ঢুকান
          • option কে seq-র শেষে ঢুকান
          • helper(end + 1) কল করুন
          • seq থেকে শেষ দুটি এলিমেন্ট মুছুন
      • অন্যথায়,
        • s[pos:] কে seq-র শেষে ঢুকান
        • helper(n) কল করুন
        • seq থেকে শেষ এলিমেন্ট মুছুন
    • মূল মেথড থেকে:
      • helper(0) কল করুন
      • res কে সর্টেড অর্ডারে রিটার্ন করুন
    উদাহরণ কোড
    class Solution:
        def solve(self, s):
            if not s:
                return [""]
            n = len(s)
            seq = []
            res = []
            def helper(pos):
                if pos == n:
                    res.append("".join(seq))
                else:
                    if "[" in s[pos:]:
                        start = pos + s[pos:].index("[")
                        end = pos + s[pos:].index("]")
                        for option in s[start + 1 : end].split("|"):
                            seq.append(s[pos:start])
                            seq.append(option)
                            helper(end + 1)
                            seq.pop()
                            seq.pop()
                    else:
                        seq.append(s[pos:])
                        helper(n)
                        seq.pop()
            helper(0)
            return sorted(res)
    
    ob = Solution()
    s = "[d|t|l]im[e|s]"
    print(ob.solve(s))
    ইনপুট
    "[d|t|l]im[e|s]"
    আউটপুট
    ['dime', 'dims', 'lime', 'lims', 'time', 'tims']
  1. পাইথনে সাবস্ট্রিং সেট থেকে নির্দিষ্ট পজিশনের সাবস্ট্রিং বের করার প্রোগ্রাম

  2. Python-এ সব সেগমেন্টের XOR শূন্য করার প্রোগ্রাম

  3. পাইথনে সব সম্ভাব্য বৈধ পথ থেকে সর্বোচ্চ স্কোর বের করার প্রোগ্রাম

  4. পাইথনে লিস্টের সব সংখ্যা গুণফল বের করার প্রোগ্রাম