`
Enria
  • 浏览: 12048 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

最长公共子串

 
阅读更多

 

/*

 * 好吧,下一题就是LCSubstring.

 * Substring的特点就是必须是连续的。

 *例如X=<A,B,C,D,E>,Y=<B,C,D,A,B>,则LCSubstring为<B,C,D>

 */

public class LongestCommonSubstring {
	
	static String X = " " + "ABCDEABC";
	static String Y = " " + "BCDABEAB";
	public static void main(String[] args) {
		LCS(X, Y);
	}
	
	public static int LCS(String x,String y){
		
		int M = x.length();
		int N = y.length();
		int flagi = 0;
		int flagj = 0;
		char[] X = x.toCharArray();
		char[] Y = y.toCharArray();
		int[][] record = new int[M][N];
		for(int i=0;i<M;i++)
			record[i][0] = 0;
		for(int j=0;j<N;j++)
			record[0][j] = 0;
		int max = 0;
		for(int i=1;i<M;i++){
			for(int j=1;j<N;j++){
				if(X[i] == Y[j]){
					record[i][j] = record[i-1][j-1] + 1;   //注意这里的递推公式
					if(record[i][j]>max){
						max = record[i][j];
						flagi = i;
						flagj = j;
					}
						
				}
					
				else
					record[i][j] = 0;
			}
		}
		
		System.out.println("Print the whole Matrix");
		for(int i=0;i<M;i++){
			for(int j=0;j<N;j++){
				System.out.print(record[i][j] + " ");
			}
			System.out.println();
		}
		System.out.println("Flagi = " + flagi);
		System.out.println("Flagj = " + flagj);
		System.out.println("Print one of the LCS");	
		for(int i=max;i>0;i--){
			System.out.print(X[flagi-i+1]);   //可以根据flagi来求得,也可以根据flagj来求得
		}
		System.out.println();
		System.out.println("The max length of LCS is " + max);
		return max;
	}
}

 不仅求得LCS的最大长度,也输出一条LCS

 解题思路是:

LCS[i][j] = LCS[i-1][j-1]+1  X[i]==Y[j]

LCS[i][j] = 0; X[i] != Y[j]

输出LCS的思路是:

利用max标记出最大值的位置,然后根据max值倒推输出,还是利用了对角线思想。

0
0
分享到:
评论

相关推荐

    用定长顺序存储结构表示串,求两个串的全部最长公共子串

    在本题目中,任务是使用定长顺序存储结构表示串,并找出两个字符串的最长公共子串。这是一个典型的字符串处理问题,通常在计算机科学和编程领域出现。以下是对这个任务的详细解析: 首先,我们需要理解“定长顺序...

    查找最长公共子串

    本话题聚焦于一个经典的算法问题——“查找最长公共子串”。这是一道典型的字符串算法题,主要考察对字符串操作和动态规划的理解。 首先,我们需要明确什么是“公共子串”。如果一个字符串s是另一个字符串t的子串,...

    最长公共子串的快速搜索算法

    最长公共子串的快速搜索算法 最长公共子串的快速搜索算法 最长公共子串的快速搜索算法

    动态规划——最长公共子序列和最长公共子串之Python实现

    用Python实现动态规划中最长公共子序列和最长公共子串问题!

    最长公共子串的求解问题

    最长公共子串求解,有需要的可以下来参考……

    C#最长公共子串(连续)算法(自创)

    在编程领域,最长公共子串(Longest Common Substring,LCS)问题是一个经典的问题,主要涉及字符串处理和算法设计。在这个案例中,我们关注的是一个由C#实现的自创算法来解决这个问题。下面将详细讲解这个算法的...

    新建 WinRAR 压缩文件_最长公共子串_

    在IT领域,尤其是在编程和算法设计中,"最长公共子串"是一个重要的概念。这个知识点主要涉及字符串处理和算法分析,对于计算机科学的学习者和开发者来说具有基础且实用的价值。在给定的压缩包文件中,我们可以看到它...

    最长公共子串MFC实现

    最长公共子串(Longest Common Substring,LCS)是一个在计算机科学中常见的字符串处理问题,它涉及到查找两个或多个字符串中的最长连续子序列,这个子序列同时存在于所有字符串中。MFC,全称为Microsoft Foundation...

    C语言求两个字符串的最长公共子串

    本文实例讲述了C语言求两个字符串的最长公共子串的方法。分享给大家供大家参考。具体实现方法如下: #include "stdio.h" #include "string.h" #include "stdlib.h" void getCommon(char str1[],char str2[],char * ...

    JavaScript自定义函数实现查找两个字符串最长公共子串的方法

    本文实例讲述了JavaScript自定义函数实现查找两个字符串最长公共子串的方法。分享给大家供大家参考,具体如下: //查找两个字符串的最长公共子串 function findSubStr(s1,s2){ var S=sstr= ,L1=s1.length,L2=s2....

    大整数计算器最长公共子串数据结构课设

    大整数计算器最长公共子串数据结构课设,沈阳工程学院

    最长公共子串(动态规划)1

    在解决最长公共子串问题时,动态规划是计算机科学领域内一种广泛应用的算法策略。动态规划的核心在于将复杂问题分解为更小的子问题,并将子问题的答案存储起来,避免重复计算,最终解决整个问题。最长公共子串问题...

    动态规划:最长公共子串 LCS

    ### 动态规划:最长公共子串 LCS #### 长度与定义 **最长公共子串(Longest Common Substring, LCS)**是两个或多个字符串中的最长字符串,该字符串同时也是这些字符串的子串。这里需要注意区分子串与子序列的概念...

    获取最长公共子串

    在编程领域,"获取最长公共子串"是一个经典的问题,主要涉及到字符串处理和算法设计。这个问题的基本目标是从两个或多个给定的字符串中找到最长的共同连续子序列,即这个子序列是每个字符串的一部分,且在原字符串中...

    求解最大子序列、最长递增子序列、最长公共子串、最长公共子序列

    求解最大子序列、最长递增子序列、最长公共子串、最长公共子序列. http://blog.csdn.net/ssuchange/article/details/17341693

    java实现求两个字符串最长公共子串的方法

    在编程领域,求解两个字符串的最长公共子串是一个经典问题,主要应用于文本处理、比较和搜索算法。这里我们将深入探讨如何使用Java实现这一方法,同时结合华为在线判题平台(OJ)的要求来编写代码。 首先,我们需要...

    PHP实现求两个字符串最长公共子串的方法示例

    在编程领域,最长公共子串(Longest Common Substring,LCS)问题是一个经典的问题,它寻找两个或多个字符串中的最长连续子序列,这个子序列同时存在于所有字符串中。在这个问题中,我们专注于PHP如何解决两个字符串...

    编辑距离与最长公共子串(字符串的相似度)

    用本程序可得到字符串的相似度和字符串的公共子串以及编辑距离。

    LCS最长公共子串

    c源码编写的求两个字符串的最长公共子串,采用递归算法

Global site tag (gtag.js) - Google Analytics