`
befairy
  • 浏览: 37406 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

动态规划求最大公共字串

阅读更多
动态规划-----求两个字符串的最大公共字串
package zju;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class SameString {

	
	public static void main(String[] args){
		String s1="";
        String s2="";
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Please Input the two strings:");
        try {
			s1=br.readLine();
			s2=br.readLine();
		    br.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
       
        SameString ss=new SameString();
        System.out.println("The longest same string is:"+ss.findSameStr(s1, s2));

	}
	public  String findSameStr(String str1,String str2){
		int len1=str1.length();
		int len2=str2.length();
		int max=0; //字符串最大长度
		int current=0;//记录str1的当前位置
		char[] c1=str1.toCharArray();
   	    char[] c2=str2.toCharArray();
		int[][] c=new int[len1][len2];//用于记录公共字串的数组
		//初始化
		for(int i=0;i<len1;i++){
			c[i][0]=0;
		}
		for(int j=0;j<len2;j++){
			c[0][j]=0;
		}
		
		for(int i=0;i<len1;i++){
			for(int j=0;j<len2;j++){
				if(c2[j]==c1[i]){
					if(i==0||j==0){
						c[i][j]=1;
						if(max<c[i][j]){
					    	max=c[i][j];
					    	current=i;	
					    }
						
					}else{
					    c[i][j]=c[i-1][j-1]+1;
					    if(max<c[i][j]){
					    	max=c[i][j];
					    	current=i;
					    }
					}
					
				}
			}
		}
       /*//输出数组c
		 for(int i=0;i<c1.length;i++){
    		 for(int j=0;j<c2.length;j++){
   			 System.out.print(" "+c[i][j]);
   		     }
    		 System.out.println("");
    	 }*/
		
		 String str="";//str存放最长公共字串
		if(max>0){
			for(int k=current-max+1;k<=current;k++){
				char ch=c1[k];
   			    str+=String.valueOf(ch);
			}
		}
		return str;
	}
    
}

分享到:
评论

相关推荐

    动态规划求最大匹配子串

    动态规划求最大匹配子串是计算机科学中的一种常见问题,旨在寻找两个字符串之间的最长公共子串。这种问题可以使用动态规划算法来解决,下面我们将详细介绍该算法的思想和实现。 算法思想: 假设我们有两个字符串...

    动态规划实现两序列最大公共子串查找(Python代码)

    最大公共子串问题是IT行业的经典面试题之一,在生物信息等领域也有重要应用。该资源使用动态规划实现了最大公共子串查找算法,问题具体描述在Problem里,代码为code.py,调试结果请参考Readme。

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

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

    C++实现找出两个字符串中最大的公共子串

    在编程领域,字符串操作是常见的任务之一,尤其是在算法设计和数据处理中...通过理解并掌握这种动态规划解决方案,可以扩展到处理更复杂的问题,比如寻找多个字符串的最大公共子串或者最长公共子序列(不连续的子串)。

    JavaScript实现求最大公共子串的方法

    标题中的"JavaScript实现求最大公共子串的方法"指的是在JavaScript编程语言中寻找两个字符串共有的最长子串。这个任务在计算机科学中属于字符串处理的一部分,常用于文本分析、比较和搜索算法。 描述中提到的...

    java实现字符串匹配求两个字符串的最大公共子串

    在Java编程中,实现字符串匹配并...总之,Java实现字符串匹配求两个字符串的最大公共子串是一个涉及字符串处理和动态规划的经典问题。通过理解上述算法思想和代码实现,开发者可以有效地处理文本数据的比较和分析任务。

    最大公共资源子串

    ### 最大公共资源子串 #### 知识点概述 本文将详细介绍如何利用C语言实现...综上所述,通过以上介绍我们可以了解到,最大公共子串问题可以通过动态规划的方法有效地解决,并且该方法在实际应用中有着广泛的应用前景。

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

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

    最长公共子串MFC实现

    最后,最长公共子串的长度就是dp数组的最大值,而子串本身可以通过回溯dp数组得到。 在MFC项目中,我们可以将这些算法逻辑封装到一个类中,比如CLCSAlgorithm,该类包含计算LCS的方法,并可能有一个成员变量来存储...

    面试必考字符串相关的动态规划——最大公共子序列、最大公共子串、编辑距离

    字符串相关的动态规划最大公共子序列最大公共子串编辑距离 简述这三个算法解决的问题和展示状态转移方程并且给出可通过执行的Python代码。 最大公共子序列 子序列是,一个字符串中的任意字符组成的序列,重点在于,...

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

    总的来说,"最长公共子串"是一个典型的字符串处理问题,它的解决方案展示了动态规划思想在实际问题中的应用。通过学习和理解这个算法,不仅可以提升编程技能,也能更好地理解和解决涉及字符串匹配的复杂问题。

    获取最长公共子串

    动态规划解决方案的核心在于创建一个二维数组,其中数组的每个元素表示两个字符串在特定位置上的公共子串长度。假设我们有两个字符串S1和S2,我们可以初始化一个m×n的二维数组dp,其中m和n分别是两个字符串的长度。...

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

    这样,数组$c$的每个元素就存储了对应位置的最大公共子串长度。 在循环结束后,我们遍历数组$c$找到最大值,并且找出对应的子串。我们使用`substr()`函数从字符串$b$中提取出最长公共子串,因为数组$c$是根据字符串...

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

    在Python编程语言中,求解两个字符串的最长公共子串是一项常见的字符串处理任务。这个问题的解决方案通常基于动态规划思想,即将问题分解为更小的子问题,并存储子问题的解以便于后续使用,从而避免重复计算。下面...

    输出最长子串的代码

    在编程领域,"最长子串...总的来说,找到多个字符串的最长公共子串是一个典型的字符串处理问题,动态规划提供了一种高效且易于理解的解决方案。在实际应用中,这种技术可以用于文本相似性检测、基因序列分析等领域。

    js判断出两个字符串最大子串的函数实现方法

    通过填表的方式,最终`dp[m][n]`即为所求的最大公共子串长度,而最长公共子串本身可以通过反向追踪`dp`数组获得。 总之,通过上述方法,我们可以在JavaScript中实现一个查找两个字符串最大公共子串的函数。该函数的...

    java求字符串的正向反向最大公共字符串

    在本例中,是寻找字符串与其反转后的最大公共子串。 解决此问题的一种有效方法是使用动态规划。动态规划是一种通过构建表来解决复杂问题的方法,它可以避免重复计算子问题。以下是一个简单的Java代码实现: ```...

    动态规划课件-动态规划入门

    最长公共子串问题是一个经典的动态规划问题,涉及字符串的处理。状态可以定义为两个字符串中长度为 k 的最长公共子串,通过比较当前字符是否匹配,以及比较不同长度的子串,来构建状态转移方程。 交错匹配问题,即...

    算法系列之六:最长公共子序列(LCS)问题(连续子序列)的三种解法.doc

    如果两个字符串的首字符不相等,则用三种对齐策略分别计算可能的最长公共子串,然后取最长的一个与当前已知的最长公共子串比较,如果比当前已知的最长公共子串长就用计算出的最长公共子串代替当前已知的最长公共子串...

Global site tag (gtag.js) - Google Analytics