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语言中编程求解两个字符串最长相同字符串的长度的主要内容,如果未能解决你的问题,请参考以下文章