কম্পিউটার

পাইথনে দুটির বেশি স্ট্রিং থেকে দীর্ঘতম সাধারণ সাবস্ট্রিং কীভাবে খুঁজে পাবেন?


দীর্ঘতম সাধারণ সাবস্ট্রিং অ্যালগরিদমের জন্য সাধারণ গতিশীল প্রোগ্রামিং বাস্তবায়ন O(nm) সময়ে চলে। নিম্নোক্তটি দীর্ঘতম সাধারণ সাবস্ট্রিং অ্যালগরিদমের একটি বাস্তবায়ন:

উদাহরণ

def longest_common_substring(s1, s2):
   m = [[0] * (1 + len(s2)) for i in xrange(1 + len(s1))]
   longest, x_longest = 0, 0
   for x in xrange(1, 1 + len(s1)):
       for y in xrange(1, 1 + len(s2)):
           if s1[x - 1] == s2[y - 1]:
               m[x][y] = m[x - 1][y - 1] + 1
               if m[x][y] > longest:
                   longest = m[x][y]
                   x_longest = x
           else:
               m[x][y] = 0
   return s1[x_longest - longest: x_longest]
print(longest_common_substring('wellbeing', 'welcome'))

আউটপুট

wel

এটা এভাবেই কাজ করে

  • প্রাথমিকভাবে, আমরা কাউন্টার অ্যারে(m) সমস্ত 0.

    আরম্ভ করেছি
  • 1ম সারি থেকে শুরু করে, আমরা একটি স্ট্রিং s1-এর প্রথম অক্ষরটিকে একটি স্ট্রিং s2-এর সমস্ত অক্ষরের সাথে তুলনা করব৷

  • যখন আমরা s2-এর অক্ষরগুলি অতিক্রম করি, যদি এটি s1-এর অক্ষরের সাথে মিলে যায়, আমরা কাউন্টারটি বৃদ্ধি করি। এটি সংরক্ষিত হবে m[i][j] যা তির্যকভাবে এক নিম্ন অবস্থানে রয়েছে।

শেষে আমরা লুপগুলিতে গণনা করা সূচকগুলি ব্যবহার করে দীর্ঘতম সাব-স্ট্রিং ফেরত দিই৷


  1. পাইথনের উৎস থেকে k-এর বেশি দৈর্ঘ্যের পথ আছে কিনা তা খুঁজুন

  2. পাইথনে একটি প্রদত্ত স্ট্রিং-এ k অনন্য অক্ষর সহ দীর্ঘতম সাবস্ট্রিং খুঁজুন

  3. দুটি স্ট্রিং থেকে অস্বাভাবিক শব্দ খুঁজে পেতে পাইথন প্রোগ্রাম

  4. দুটি সাজানো অ্যারে থেকে সবচেয়ে কাছের জুটির সন্ধানের জন্য পাইথন প্রোগ্রাম