用JAVA编写一个程序实现,计算两个字符串最长相同子串的长度。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用JAVA编写一个程序实现,计算两个字符串最长相同子串的长度。相关的知识,希望对你有一定的参考价值。
根据题目要求,尽可能简单哦。。。谢谢各位大神
//刚才写的。。。。import java.io.DataInputStream;
import java.io.IOException;
public class StringLength
public String search(String s1, String s2)
String max = "";
for (int i = 0; i < s1.length(); i++)
for (int j = i; j < s1.length(); j++)
String sub = s1.substring(i, j);
if ((s2.indexOf(sub) != -1) && sub.length() > max.length())
max = sub;
return max;
public static void main(String[] args)
String a = "";
String b = "";
System.out.println("请输入第一个字符串:");
a = inputString.getString();
System.out.println("请输入第二个字符串:");
b = inputString.getString();
String output = new StringLength().search(a, b);
System.out.println("相同的字符串是:" + output + "长度为:" + output.length());
class inputString
public static String getString()
DataInputStream dis = new DataInputStream(System.in);
String value = null;
try
@SuppressWarnings("deprecation")
String str = dis.readLine();
value = str;
catch (IOException e)
e.printStackTrace();
return value;
参考技术A
这个我写过哎!等等。
public class StrStatisticpublic String comparison(String str1, String str2)
String retStr="";
int count=1;
for(int i=0;i<str2.length();i++)
String tmpStr=str2.substring(i,i+1);
boolean flag=contains(str1,tmpStr);
while(flag)
count++;
if(tmpStr.length()>retStr.length())
retStr=tmpStr;
tmpStr=str2.substring(i,i+count);
flag=contains(str1,tmpStr);
System.out.println("tmpStr="+tmpStr);
System.out.println("retStr="+retStr);
if(!flag)
count=1;
return retStr;
public boolean contains(String str1,String str2)
if(str1.indexOf(str2)>=0)
return true;
return false;
public static void main(String[] args)
String str1="afdafda,dfahello,dfafa,okkos";
String str2="aaahell0";
System.out.println(new StrStatistic().comparison(str1, str2));
参考技术B public class LCS
02
03 private void printLCS(StringBuffer sb, int i, intj, String s1, int[][] flag)
04 if (i == 0 || j == 0)
05 return;
06 if (flag[i][j] == 1)
07 printLCS(sb, i-1, j-1, s1, flag);
08 sb.append(s1.charAt(i-1));
09 else if (flag[i][j] == 2)
10 printLCS(sb, i-1, j, s1, flag);
11 else
12 printLCS(sb, i, j-1, s1, flag);
13
14
15
16 public String calculateLCS(String s1, String s2)
17
18 int[][] result = new int[s1.length()+1][s2.length()+1];
19 int[][] flag = new int[s1.length()+1][s2.length()+1];
20 for (int i = 0; i <= s1.length(); i++)
21 result[i][0] = 0;
22
23 for (int i = 0; i <= s2.length(); i++)
24 result[0][i] = 0;
25
26 for (int i = 1; i <= s1.length(); i++)
27 for (int j = 1; j <= s2.length(); j++)
28 if (s1.charAt(i-1) == s2.charAt(j-1))
29 result[i][j] = result[i-1][j-1] + 1;
30 flag[i][j] = 1;
31 else if (result[i-1][j] >= result[i][j-1])
32 result[i][j] = result[i-1][j];
33 flag[i][j] = 2;
34 else
35 result[i][j] = result[i][j-1];
36 flag[i][j] = 3;
37
38
39
40
41 StringBuffer sb = new StringBuffer();
42 printLCS(sb, s1.length(), s2.length(), s1, flag);
43 String lcs = sb.toString();
44 return lcs;
45
46
47
48
49 public static void main(String[] args)
50 String s1="ssssssssssssssssssssssssssssssss";
51 String s2="111sssss11ss";
52 LCS lcs = new LCS();
53 System.out.print(lcs.calculateLCS(s1, s2));
54
55
56 参考技术C 真不简单,依次选取其中一个字符串中字符同另一字符串比较,如相同,则增加一个字符继续比较,如不同就记下长度,从下一个字符作起点再重复刚才过程,如相同则再增加一个长度。直到全部字符比较完毕。最后从全部的长度数据中挑最大值。关键是思路,语法不会都不是问题 参考技术D 善意提示:
前面的substring的程序有bug,String1 = 'aaahello' String2='hello' 试试看!
stringObject.substring(start,stop)
start 必需。
一个非负的整数,规定要提取的子串的第一个字符在stringObject 中的位置。
stop 可选。
一个非负的整数,比要提取的子串的最后一个字符在stringObject 中的位置多1。
如果省略该参数,那么返回的子串会一直到字符串的结尾。
以上是关于用JAVA编写一个程序实现,计算两个字符串最长相同子串的长度。的主要内容,如果未能解决你的问题,请参考以下文章
ZZNUOJ_用C语言编写程序实现1170:最长字符串(指针专题)(附完整源码)