java语言中编程求解两个字符串最长相同字符串的长度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java语言中编程求解两个字符串最长相同字符串的长度相关的知识,希望对你有一定的参考价值。

两个字符串中可能有很多相同的子串,在这些子串中肯定存在一个最长的子串,那该如何找到该子串并计算其长度

public class StringTest4

/**
* @param args
*/
public static void main(String[] args)

/*
* 需求4:两个字符串的最大相同子串。
* "sadfcctvghjkl"
* "zxcctvcv"
*
* 思路:
* 1,以短的字符串为主。
* 到长的字符串中去判断是否存在,如果存在,已找到。
* 2,如果没有找到。将短的字符串的长度递减获取子串继续到长的串中查找。只要找到就结束。
* 3,没有找到,说明没有相同的。
*
*/

String s1 = "sadfcctvghjkl";
String s2 = "zxcctvcv";
String maxSub = getMaxSubString(s2,s1);

System.out.println("maxsub="+maxSub+" length="+maxSub.length());



public static String getMaxSubString(String s1, String s2)
//确定哪个是长的哪个是短的。
String longStr,shortStr;
longStr = s1.length()>s2.length()?s1:s2;
shortStr = s1.equals(longStr)?s2:s1;

// System.out.println("long:"+longStr);
// System.out.println("short:"+shortStr);
//对短的字符串操作,从短串中取子串,到长字符串中判断,是否存在。
for(int x=0; x<shortStr.length(); x++)

for(int y=0,z=shortStr.length()-x; z<=shortStr.length(); y++,z++)

//根据y,z,获取子串。
String temp = shortStr.substring(y,z);
// System.out.println(temp);
if(longStr.contains(temp))
return temp;




return null;


参考技术A 动态规划算法 网上有很多的 自己百度 看懂动态规划算法你就会了

以上是关于java语言中编程求解两个字符串最长相同字符串的长度的主要内容,如果未能解决你的问题,请参考以下文章

动态规划求解最长公共子序列问题

程序设计:将一个数字字符串转换成与其面值相同的长整型整数

请帮忙///如何计算两个 字符串的最长公共子串

Java 求解最长公共子序列&不相交的线&判断子序列&两个字符串的删除操作

459. 重复子字符串(Python)

java String类-获取两个字符串的最长相同子串