特斯拉:將嚴格遵守資料安全法,保護消費者資料相關權益
阿新 • • 發佈:2021-06-11
最長公共子序列
1.問題 給定序列
X=<x1,x2,...,xm>
Y=<y1,y2,...,yn>
求 X 和 Y 的最長公共子序列Z
2.解析
3.設計
最長公共子序列
public static void getLCS(String x, String y){ char[] s1 = x.toCharArray(); char[] s2 = y.toCharArray(); int[][] array = new int[x.length()+1][y.length()+1]; for(int j = 0; j < array[0].length; j++){ array[0][j] = 0; } for(int i = 0; i < array.length; i++){ array[i][0] = 0; } for(int m = 1; m < array.length; m++){ for(int n = 1; n < array[m].length; n++){ if(s1[m - 1] == s2[n - 1]){ array[m][n] = array[m-1][n-1] + 1; }else{ array[m][n] = max(array[m -1][n], array[m][n -1]); } } } Stack stack = new Stack(); int i = x.length() - 1; int j = y.length() - 1; while((i >= 0) && (j >= 0)){ if(s1[i] == s2[j]){ stack.push(s1[i]); i--; j--; }else{ if(array[i+1][j] > array[i][j+1]){ j--; }else{ i--; } } } while(!stack.isEmpty()){ System.out.print(stack.pop()); } } public static int max(int a, int b){ return (a > b)? a : b; } }
4.分析
T=O(mn),分別為兩個字串的長度
5.原始碼
https://github.com/JessySnow/Algorithm/blob/master/src/T9/LCS.java