C#动态规划查找两个字符串最大子串

时间:2022-09-25 15:14:39
 //动态规划查找两个字符串最大子串
        public static string lcs(string word1, string word2)
        {
            int max = 0;
            int index = 0;
            int[,] nums = new int[word1.Length + 1,word2.Length+1];
            for (int i = 0; i <= word1.Length; i++)
            {
                for (int j = 0; j <= word2.Length; j++)
                {
                    nums[i,j] = 0;
                }
            }             for (int i = 0; i <= word1.Length; i++)
            {
                for (int j = 0; j <= word2.Length; j++)
                {
                    if (i == 0 || j == 0)
                    {
                        nums[i, j] = 0;
                    }
                    else
                    {
                        if (word1[i - 1] == word2[j - 1])
                        {
                            nums[i,j] = nums[i - 1, j - 1] + 1;
                        }
                        else
                        {
                            nums[i, j] = 0;
                        }
                    }
                    if (max < nums[i, j])
                    {
                        max = nums[i, j];
                        index = i;
                    }
                }
            }
            
            string str = "";
            if (max == 0)
            {
                return "";
            }
            else 
            {
                for (int i = index-max; i <= max; i++)
                {
                    str += word2[i];
                }
                return str;
            }
        }