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

পাইথনে সর্বোচ্চ দৈর্ঘ্যের "নাইস" সাবস্ট্রিং খুঁজে বের করা


একটি স্ট্রিং s দেওয়া আছে। s-এর সর্বোচ্চ দৈর্ঘ্যের "নাইস" সাবস্ট্রিং বের করতে হবে। একটি স্ট্রিং "নাইস" হবে যদি সেটিতে থাকা প্রতিটি বর্ণ বড় হাত এবং ছোট হাত উভয় রূপে উপস্থিত থাকে। একাধিক হলে সবচেয়ে আগে আসা সাবস্ট্রিং ফেরত দিন।

যেমন, s = "ZbybBbz" হলে আউটপুট "bBb"। কারণ এতে 'b' এবং 'B' দুটি রূপেই আছে।

সমাধানের ধাপসমূহ

  • cur_max := -1, res := ""
  • i = 0 থেকে s-এর দৈর্ঘ্য পর্যন্ত লুপ:
    • c := s[i], upper := set(), lower := set()
    • যদি c ছোট হাত হয়, তবে lower-এ যোগ করুন।
    • যদি c বড় হাত হয়, তবে upper-এ c.lower() যোগ করুন।
    • j = i+1 থেকে s-এর দৈর্ঘ্য পর্যন্ত লুপ:
      • c := s[j], upper/lower সেট আপডেট করুন।
      • যদি upper == lower হয় এবং j-i > cur_max হয়, তবে cur_max := j-i, res := s[i:j+1]
  • res ফেরত দিন।

উদাহরণ

def solve(s):
    cur_max = -1
    res = ""
    for i in range(len(s)):
        c = s[i]
        upper = set()
        lower = set()
        if c.islower():
            lower.add(c)
        if c.isupper():
            upper.add(c.lower())
        for j in range(i+1, len(s)):
            c = s[j]
            if c.islower():
                lower.add(c)
            if c.isupper():
                upper.add(c.lower())
            if upper == lower:
                if j - i > cur_max:
                    cur_max = j - i
                    res = s[i:j+1]
    return res

s = "ZbybBbz"
print(solve(s))

ইনপুট

"ZbybBbz"

আউটপুট

bBb

  1. পাইথনে সর্বোচ্চ দৈর্ঘ্যের প্যালিনড্রোমিক সাবসিকোয়েন্স খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে সর্টেড স্ট্রিং থেকে কমপক্ষে k বার উপস্থিত হয় এমন সবচেয়ে লম্বা সাবস্ট্রিং বের করার প্রোগ্রাম

  3. পাইথনে সর্বোচ্চ দৈর্ঘ্যের প্যালিনড্রোমিক সাবস্ট্রিং খুঁজে বের করার প্রোগ্রাম

  4. পাইথনে লองেস্ট প্যালিনড্রোমিক সাবস্ট্রিং (Longest Palindromic Substring)