查找两个字符串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中的最长公共子串

题目描述 题目标题: 计算两个字符串的最大公共字串的长度,字符不区分大小写 详细描述: 接口说明 原型: int getCommonStrLength(char * pFirstStr,...
  • asd199086
  • asd199086
  • 2016年08月21日 16:56
  • 798

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

如"abcde" "bkcdq" 最大公共子字符串是"cd" public static void findMaxCommonStr(){ Scanner s = new Scanner(Sys...
  • lingzhm
  • lingzhm
  • 2015年08月21日 16:06
  • 2138

求字符串A与字符串B的最长公共字符串(JAVA)

思路:引入一个矩阵的思想,把字符串A(长度为m)当成矩阵的行,把字符串B(长度为n)当矩阵的列,这样就构成一个m*n的矩阵。若该矩阵的节点对应的字符相同,即m[i]=n[j]时,该节点值为1;当前字符...
  • qq_16687803
  • qq_16687803
  • 2015年06月07日 13:06
  • 946

最大公共子串(C语言实现)

给定两个字符串A和B,输出A和B中的最大公共子串。比如A=”aocdfe”,B=”pmcdfa”,则输出“cdf”#include #include #includechar *commstring(...
  • u012260238
  • u012260238
  • 2015年11月12日 20:29
  • 1547

求两个字符串的最长公共子串——Java实现

要求:求两个字符串的最长公共子串,如“abcdefg”和“adefgwgeweg”的最长公共子串为“defg”(子串必须是连续的) 方法一: 对于较短的那个字符串,假设其长度为n,依次找到它的长度...
  • xiaoyi357
  • xiaoyi357
  • 2017年04月17日 15:06
  • 4772

51Nod-1006-最长公共子序列Lcs

给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。 比如两个串为:abcicba abdkscabab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最...
  • f_zyj
  • f_zyj
  • 2016年04月15日 18:08
  • 1523

面试题:给定a、b字符串,判断b是否为a的变位词(scala版本)

面试题:给定a、b字符串,判断b是否为a的变位词(scala版本)
  • wangzfox
  • wangzfox
  • 2015年05月10日 22:33
  • 421

**输出最长公共子序列-字符串

输入 第1行:字符串A 第2行:字符串B (A,B的长度 输出 输出最长的子序列,如果有多个,随意输出1个。 输入示例 abcicba abdkscab 输出示例 abca...
  • idealistic
  • idealistic
  • 2016年08月12日 20:12
  • 343

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

对于两个字符串,不好直接运用后缀数组,所以我们可以把两个子串串中间用一个在字符串中不会出现的字符连接起 来,比如'$‘,计算后缀数组,检查后缀数组中所有相邻后缀。分属于两个字符串的后缀的lcp的最大值...
  • u013008291
  • u013008291
  • 2015年08月30日 17:28
  • 1977

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

求两个字符串最长公共子串LCS(Longest Common Subsequence),以及该算法的来龙去脉。...
  • zztfj
  • zztfj
  • 2011年01月21日 17:15
  • 8868
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:查找两个字符串a,b的最长公共子串
举报原因:
原因补充:

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