用於最長公共子序列的 Java 程式


以下是用於最長公共子序列的 Java 程式 −

範例

 動態演示

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

一個名為 Demo 的類包含一個函式,稱為“subseq”,該函式返回給定字串的最長公共子序列,即 str_1[0 到 len(str_1-1),str_2(0 到 len(str_2-1)。兩個“for”迴圈在兩個字串的長度上迭代,如果“i”和“j”都是 0,則陣列的特定索引將被分配為 0。否則,將構建 my_arr[第一個字串的長度 +1][第二個字串的長度 +1]。</p>

主函式定義了 Demo 類的新的例項,並定義了兩個字串 my_str_1 和 my_str_2。兩個字串都將轉換為陣列,其長度儲存在單獨的變數中。該函式在這些值上被呼叫。</p>

這是一項動態規劃技術,其中一個值被計算並存儲在一個數組內,無需像在遞迴中那樣反覆計算它。只要需要一個先前計算過的元素,它就會從陣列中獲取。</p>

更新日期: 2020-07-04

273 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.