zoukankan      html  css  js  c++  java
  • String Match

    Finding length of longest common substring
     1 /*Finding length of longest common substring using DP
     2  * */
     3 import java.util.*;
     4 public class Solution {
     5     /*
     6      * Returns length of longest common substring of
     7      * X[0...m-1] and Y[0...n-1]
     8      * */
     9     public static int LCSubStr(char X[], char Y[], int m, int n) {
    10         /*Create a table to store lengths of longest common suffixes of substrings.
    11          * Note that LCSuff[i][j] contains length of longest common suffix of X[0...i-1] and Y[0...j-1]
    12          * The first row and first column entries have no logical meaning, they are only for the simplicity of program
    13          * */
    14         
    15         int LCStuff[][] = new int[m+1][n+1];
    16         int result = 0;//to store the longest common substring
    17         
    18         //Following steps build LCStuff[m+1][n+1] in bottom up fashion
    19         for(int i = 0; i <= m; i++) {
    20             for(int j = 0; j <= n; j++) {
    21                 if(i == 0 || j == 0) {
    22                     LCStuff[i][j] = 0;
    23                 }else if(X[i-1] == Y[j-1]){
    24                     LCStuff[i][j] = LCStuff[i-1][j-1] + 1;
    25                     result = Integer.max(result, LCStuff[i][j]);
    26                 }else {
    27                     LCStuff[i][j] = 0;
    28                 }
    29             }
    30             
    31         }
    32         
    33         return result;
    34     }
    35     
    36     //Driver Program to test above function
    37     public static void main(String[] args) {
    38         String X = "GeeksforGeeks";
    39         String Y = "GeeksQuiz";
    40         
    41         int m = X.length();
    42         int n = Y.length();
    43         
    44         System.out.println("Length of longest common substring is " + LCSubStr(X.toCharArray(), Y.toCharArray(), m,n));
    45         
    46     }
    47 }

    Print the longest common substring

     1 /*Print longest common substring using DP
     2  * */
     3 import java.util.*;
     4 public class Solution {
     5     /*
     6      * Print longest common substring of
     7      * X[0...m-1] and Y[0...n-1]
     8      * */
     9     public static void printLCSubStr(String X, String Y, int m, int n) {
    10         /*Create a table to store lengths of longest common suffixes of substrings.
    11          * Note that LCSuff[i][j] contains length of longest common suffix of X[0...i-1] and Y[0...j-1]
    12          * The first row and first column entries have no logical meaning, they are only for the simplicity of program
    13          * */
    14         
    15         int LCStuff[][] = new int[m+1][n+1];
    16         int len = 0;//to store the length of longest common substring
    17         /* To store the index of the cell which contains the maxium value. 
    18          * The cell's index helps in building up the longest common sustring from right to left. 
    19          **/
    20         
    21         int row = 0, col = 0;
    22         
    23         //Following steps build LCStuff[m+1][n+1] in bottom up fashion
    24         for(int i = 0; i <= m; i++) {
    25             for(int j = 0; j <= n; j++) {
    26                 if(i == 0 || j == 0) {
    27                     LCStuff[i][j] = 0;
    28                 }else if(X.charAt(i-1) == Y.charAt(j-1)){
    29                     LCStuff[i][j] = LCStuff[i-1][j-1] + 1;
    30                     if(len < LCStuff[i][j]) {
    31                         len = LCStuff[i][j];
    32                         row = i;
    33                         col = j;
    34                     }
    35                 }else {
    36                     LCStuff[i][j] = 0;
    37                 }
    38             }
    39         }
    40 //        System.out.println("fin row = " + row);
    41 //        System.out.println("fin col = " + col);
    42         // if true, then no common substring exists
    43         if(len == 0) {
    44             System.out.println("No Common Substring");
    45             return ;
    46         }
    47         
    48         // allocate space for the longest common substring
    49         String resultStr = "";
    50         
    51         //traverse up diagonally from the (row, col) cell until LCStuff[row][col] ! = 0
    52         //ex. len = 4, then (row, col) is 4 and then goes up diagonally, then you get 3-2-1-0 and append the chars from right to left in the result alongside the way
    53         while(LCStuff[row][col] != 0) {
    54             resultStr = X.charAt(row-1) + resultStr; //or Y[col-1]
    55             --len;
    56             
    57             //move diagonally up to previous cell
    58             row--;
    59             col--;
    60         }
    61         
    62         //print longest common substring
    63         System.out.println("Longest common substring: " + resultStr);
    64     }
    65     
    66     //Driver Program to test above function
    67     public static void main(String[] args) {
    68         String X = "ABCXYZAY";
    69         String Y = "XYZABCB";
    70         
    71         int m = X.length();
    72         int n = Y.length();
    73         
    74         printLCSubStr(X, Y, m, n);
    75         
    76     }
    77 }
  • 相关阅读:
    互联网预言大神:凯文·凯利——预测未来的12个趋势
    仅有算法远远不够:AI突破下一站,需要对硬件重新审视
    软件开发中经常使用的5种设计模式
    强化学习到底是什么,它如何运作?
    2020年网络安全的六大经验教训
    选择困难终结者:不同问题之下的机器学习算法
    为什么物联网如此重要?
    Pku3080 Blue Jeans
    pku1734 Musical Theme
    [Usaco2006 Dec]Milk Patterns
  • 原文地址:https://www.cnblogs.com/prmlab/p/8113463.html
Copyright © 2011-2022 走看看