দীর্ঘতম সাধারণ সাবস্ট্রিং অ্যালগরিদমের জন্য সাধারণ গতিশীল প্রোগ্রামিং বাস্তবায়ন 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] যা তির্যকভাবে এক নিম্ন অবস্থানে রয়েছে।
শেষে আমরা লুপগুলিতে গণনা করা সূচকগুলি ব্যবহার করে দীর্ঘতম সাব-স্ট্রিং ফেরত দিই৷