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

পাইথনে স্ট্রিং-এ যেসব সাবস্ট্রিং-এর অ্যানাগ্রাম অন্য জায়গায় আছে সেগুলো বের করার প্রোগ্রাম

একটি লোয়ারকেস স্ট্রিং s দেওয়া আছে। s-এর যেসব সাবস্ট্রিং-এর অ্যানাগ্রাম s-এ অন্য একটি আলাদা লোকেশনে আছে, সেগুলো লেক্সিকোগ্রাফিক্যাল অর্ডারে রিটার্ন করুন।

উদাহরণ

s = "abcba" → আউটপুট: ['a', 'a', 'ab', 'abc', 'abcb', 'b', 'b', 'ba', 'bc', 'bcba', 'cb', 'cba']

এলগরিদম

  1. res := [], L := len(s)
  2. for i in 1..L (সাবস্ট্রিং দৈর্ঘ্য):
    • smap := defaultdict(list)
    • for j in 0..L-i:
      • cs := s[j:j+i]
      • k := ''.join(sorted(cs))
      • smap[k].append(cs)
    • প্রতিটি k, v ইন smap-এ:
      • যদি len(v) >= 2: res.extend(v)
  3. sorted(res) রিটার্ন করুন।

পাইথন কোড

from collections import defaultdict

def solve(s):
    res = []
    L = len(s)
    for i in range(1, L + 1):
        smap = defaultdict(list)
        for j in range(L - i + 1):
            cs = s[j : j + i]
            k = "".join(sorted(cs))
            smap[k].append(cs)
        for k, v in smap.items():
            if len(v) >= 2:
                res.extend(v)
    return sorted(res)

s = "abcba"
print(solve(s))
# আউটপুট: ['a', 'a', 'ab', 'abc', 'abcb', 'b', 'b', 'ba', 'bc', 'bcba', 'cb', 'cba']

ইনপুট / আউটপুট

"abcba"
['a', 'a', 'ab', 'abc', 'abcb', 'b', 'b', 'ba', 'bc', 'bcba', 'cb', 'cba']
  1. পাইথনে স্ট্রিং S-এর সকল অ্যানাগ্রামের স্টার্ট ইন্ডেক্স T-এ খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে স্ট্রিং-এ ডুপ্লিকেট ক্যারেক্টার খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে লিস্ট থেকে ইনপুট স্ট্রিং-এর ক্লোজ ম্যাচ (Close Matches) খুঁজে বের করা

  4. পাইথন প্রোগ্রাম: স্ট্রিং-এ মিরর ক্যারেক্টার বের করা