查找两个字符串a,b的最长公共子串

原创 2016年08月28日 15:56:59

       对于两个字符串a、b,开辟一个大小为[a.length()+1][b.length()+1]的二维整型数组,初始化第一行和第一列为0,对于其他的每一个a[i][j],如果字符串a的第i个字符与字符串b的第j个字符相等,那么a[i][j]=a[i-1][j-1]+1,否则a[i][j]=0。

import java.util.Scanner;


public class Main{
	
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		String s1=scanner.next();
		String s2=scanner.next();
		String common=getCommonString(s1,s2);
		System.out.println(common);
	}

	public static String getCommonString(String s1, String s2) {
		int m=s1.length();
		int n=s2.length();
		int max=0;
		int pos=-1;
		int[][] a=new int[m+1][n+1];
		for(int i=1;i<m+1;i++){
			for(int j=1;j<n+1;j++){
				if(s1.charAt(i-1)==s2.charAt(j-1)){
					a[i][j]=a[i-1][j-1]+1;
					if(a[i][j]>max){
						max=a[i][j];  //记录最长子串长度
						pos=i-1; //记录最长子串的最后一个字符位置
					}
				}else{
					a[i][j]=0;
				}
			}
		}
		if(max!=0){ //返回最长子串
			return s1.substring(pos-max+1,pos+1);
		}
		return null;
	}
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

华为OJ——查找两个字符串a,b中的最长公共子串

题目描述 查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。  输入描述: 输入两个字符串 输出描述: 返回重复出现的字符 输入例子: abcdefg...

查找两个字符串a,b中的最长公共子串

一、问题描述查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。输入描述:输入两个字符串输出描述:返回重复出现的字符输入例子:abcdefghijklmnop abcsafj...

华为练习--查找两个字符串a,b中的最长公共子串

这个问题:查找两个字符串中的最长公共子串是一个很常见的问题。以前一直都没搞懂,现在终于弄明白了。但是我这里使用的是string类以及它相关的函数。还可以不用string类来实现。...
  • xmh1954
  • xmh1954
  • 2014年09月11日 16:17
  • 999

华为OJ 公共字串计算&&查找两个字符串a,b中的最长公共子串

题目描述 题目标题: 计算两个字符串的最大公共字串的长度,字符不区分大小写 详细描述: 接口说明 原型: int getCommonStrLength(char * pFirstStr,...

找出两个字符串最长公共子串

  • 2009年12月01日 13:35
  • 24KB
  • 下载

LCS两个字符串最长公共子串

LCS问题就是求两个字符串最长公共子串的问题。解法就是用一个矩阵来记录两个字符串中所有位置的两个字符之间的匹配情况,若是匹配则为1,否则为0。然后求出对角线最长的1序列,其对应的位置就是最长匹配子串的...

两个字符串的最长公共子串

例如str1:=“abcd”;str2 = “bcde”; 定义一个二维数组啊arr[4[4]; a b c d b 0 1 0 0 c 0 0 1 0 d 0 0 0 0 e 0 ...

求两个字符串的最长公共子串(LCS)

记字符串Xi和Yj的LCS的长度为c[i,j](c[i][j] 代表了长度为i的X子串和长度为j的Y子串的LCS的长度),我们可以递归地求c[i,j]:           /      0    ...

求两个字符串最长公共子串(动态规划)

code如下: //Longest common sequence, dynamic programming method void FindLCS(char *str1, char *str2)...

两个字符串的最长公共子串-后缀数组

求解两个子串的最长公共子串一般常用的是动态规划算法,但是用后缀数组来处理这一类问题会非常简便,在很多刷题系统中基本都有最长公共子串的处理,所以这一类问题是比较重要的。 c++版本的后缀数组处理最长公...
  • uestclr
  • uestclr
  • 2016年02月03日 19:55
  • 376
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:查找两个字符串a,b的最长公共子串
举报原因:
原因补充:

(最多只允许输入30个字)