• 最长公共子序列


    公共子序列
    f[i][j]表示a[0,...,i-1] 和 b[0,...,j-1] 最长公共子序列的长度。

    
    import java.util.*;
    public class Main {
        static int solution(char[] a, char[] b) {
            int n = a.length, m = b.length;
            int[][] f = new int[n+1][m+1];
            for(int i=1; i <= n; i++) {
                for(int j=1; j <= m; j++) {
                    if(a[i-1] != b[j-1]) {
                        f[i][j] = Math.max(f[i-1][j], f[i][j-1]);
                    } else 
                        f[i][j] = f[i-1][j-1] + 1;
                }
            }
            //System.out.println(Arrays.deepToString(f));
            return f[n][m];
        }
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            while(sc.hasNext()) {
                char[] a = sc.next().toLowerCase().toCharArray();
                char[] b = sc.next().toLowerCase().toCharArray();
                int res = solution(a,b);
                System.out.println(res);
            }
        }
    }
    

    公共子串
    f[i][j]表示以a[i-1] 和 b[j-1] 结尾的子串,最长公共子串的长度。

    import java.util.*;
    public class Main {
        static int solution(char[] a, char[] b) {
            int n = a.length, m = b.length;
            int[][] f = new int[n+1][m+1];
            for(int i=1; i <= n; i++) {
                for(int j=1; j <= m; j++) {
                    if(a[i-1] == b[j-1])
                        f[i][j] = f[i-1][j-1] + 1;
                }
            }
            //System.out.println(Arrays.deepToString(f));
            int res = 0;
            for(int i=0; i <= n; i++)
                for(int j=0; j <= m; j++)
                    res = Math.max(res, f[i][j]);
            return res;
        }
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            while(sc.hasNext()) {
                char[] a = sc.next().toLowerCase().toCharArray();
                char[] b = sc.next().toLowerCase().toCharArray();
                int res = solution(a,b);
                System.out.println(res);
            }
        }
    }
    
  • 相关阅读:
    POJ 基本算法(3)
    给定范围的素数筛选(POJ 2689)
    无向图、有向图的最小环
    第k短路和A*
    HDU 4302 Holedox Eating (set + iterator)
    笛卡尔树
    HDU 多校联合第一场
    HDU 多校联合第二场
    POJ 图算法(3)
    POJ 1038 Bugs Integrated, Inc. (状态dp)
  • 原文地址:https://www.cnblogs.com/lixyuan/p/13257238.html
Copyright © 2020-2023  润新知