सबसे लंबे सामान्य बाद के लिए जावा प्रोग्राम निम्नलिखित है -
उदाहरण
public class Demo{ int subseq(char[] a, char[] b, int a_len, int b_len){ int my_arr[][] = new int[a_len + 1][b_len + 1]; for (int i = 0; i <= a_len; i++){ for (int j = 0; j <= b_len; j++){ if (i == 0 || j == 0) my_arr[i][j] = 0; else if (a[i - 1] == b[j - 1]) my_arr[i][j] = my_arr[i - 1][j - 1] + 1; else my_arr[i][j] = max_val(my_arr[i - 1][j], my_arr[i][j - 1]); } } return my_arr[a_len][b_len]; } int max_val(int val_1, int val_2){ return (val_1 > val_2) ? val_1 : val_2; } public static void main(String[] args){ Demo my_inst = new Demo(); String my_str_1 = "MNSQR"; String my_str_2 = "PSQR"; char[] a = my_str_1.toCharArray(); char[] b = my_str_2.toCharArray(); int a_len = a.length; int b_len = b.length; System.out.println("The length of the longest common subsequence is"+ " " + my_inst.subseq(a, b, a_len, b_len)); } }
आउटपुट
The length of the longest common subsequence is 3
डेमो नामक एक वर्ग में "सबसेक" नामक एक फ़ंक्शन होता है जो दिए गए स्ट्रिंग्स के लिए सबसे लंबा सामान्य अनुवर्ती देता है यानी str_1[0 से len(str_1-1) , str_2(0 to len(str_2-1) //2 'for' लूप दोनों तारों की लंबाई पर पुनरावृत्त होते हैं और यदि 'i' और 'j' दोनों 0 हैं, तो, सरणी के विशिष्ट सूचकांक 0 को असाइन किए जाते हैं। अन्यथा, my_arr [पहली स्ट्रिंग की लंबाई +1] [दूसरी स्ट्रिंग की लंबाई + 1] बनाया गया है।
मुख्य फ़ंक्शन डेमो क्लास के एक नए उदाहरण को परिभाषित करता है और दो स्ट्रिंग्स my_str_1 और my_str_2 को परिभाषित करता है। दोनों तारों को सरणियों में बदल दिया जाता है और उनकी लंबाई अलग-अलग चरों में जमा हो जाती है। फ़ंक्शन को इन मानों पर कहा जाता है।
यह गतिशील प्रोग्रामिंग तकनीक है जिसमें एक मान की गणना की जाती है और एक सरणी में संग्रहीत किया जाता है, इसे बार-बार गणना करने की आवश्यकता को हटाकर पुनरावृत्ति के रूप में। जब भी पहले से गणना किए गए तत्व की आवश्यकता होती है, तो इसे सरणी से प्राप्त किया जाता है।