• Find Longest common string


    动态规划法:

    用二维矩阵来的每个元素来代表两个字符串的字符匹配情况,

    LCS[i, j]= LCS[i-1, j-1] + 1  , if X[i-1] == Y[J-1].

    LCS[i, j] =0, everything else

    每一个元素记载着两个字符串的相似程度,而且每个元素只需关心上一个元素的值来计算字符串比较的累计情况。

    实现代码:


           public static string LongestCommonString(string x, string y)
            {
                if (x == null || y == null)
                {
                    return null;
                }
    
                if (string.IsNullOrEmpty(x) || string.IsNullOrEmpty(y))
                {
                    return string.Empty;
                }
    
                int m = x.Length;
                int n = y.Length;
    
                int[,] LCS = new int[m, n];
                int result = 0;
                int mIndex = 0;
                int nIndex = 0;
    
                for(int i = 0; i < m; i++)
                {
                    for (int j = 0; j < n; j++)
                    {
                        if (i == 0 || j == 0)
                        {
                            LCS[i, j] = 0;
                        }
                        else if (x[i - 1] == y[j - 1])
                        {
                            LCS[i, j] = 1 + LCS[i - 1, j - 1];
                            if (result < LCS[i, j])
                            {
                                result = LCS[i, j];
                                mIndex = i;
                                nIndex = j;
                            }                        
                        }
                    }
                }
    
                StringBuilder sb = new StringBuilder();
                Stack<char> stack = new Stack<char>();
                while(result > 0)
                {
                    stack.Push(x[mIndex-1]);
                    result = LCS[mIndex-1, nIndex-1];
                    mIndex--;
                    nIndex--;
                }
    
                while(stack.Count > 0)
                {
                    sb.Append(stack.Pop());
                }
    
                return sb.ToString();
            }
  • 相关阅读:
    洛谷月赛 Hello World(升级版)
    codevs1001 舒适的路线
    vijos & codevs 能量项链
    vijos 运输计划
    noip2016普及组题解和心得
    UVa 10891 Game of Sum
    UVa 10635 Prince and Princess
    某模拟题题解 2016.11.17
    贪心入门题
    某模拟题题解 2016.11.16
  • 原文地址:https://www.cnblogs.com/xuyanran/p/8594180.html
Copyright © 2020-2023  润新知