用JAVA编写一个程序实现,计算两个字符串最长相同子串的长度。

根据题目要求,尽可能简单哦。。。谢谢各位大神... 根据题目要求,尽可能简单哦。。。谢谢各位大神 展开
 我来答
飞雪A1A2
2013-12-14 · TA获得超过213个赞
知道小有建树答主
回答量:191
采纳率:0%
帮助的人:157万
展开全部
//刚才写的。。。。
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;
}
}
乌微月2S
2013-12-14 · TA获得超过5037个赞
知道大有可为答主
回答量:5361
采纳率:42%
帮助的人:2900万
展开全部

这个我写过哎!等等。

public class StrStatistic {
public 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));
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沉迷黑暗95
2013-12-14 · 超过21用户采纳过TA的回答
知道答主
回答量:82
采纳率:100%
帮助的人:45.7万
展开全部
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 }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友142b5c7ce
2013-12-14 · TA获得超过157个赞
知道答主
回答量:169
采纳率:50%
帮助的人:79.4万
展开全部
真不简单,依次选取其中一个字符串中字符同另一字符串比较,如相同,则增加一个字符继续比较,如不同就记下长度,从下一个字符作起点再重复刚才过程,如相同则再增加一个长度。直到全部字符比较完毕。最后从全部的长度数据中挑最大值。关键是思路,语法不会都不是问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-12-15
展开全部
善意提示:
前面的substring的程序有bug,String1 = 'aaahello' String2='hello' 试试看!

stringObject.substring(start,stop)
start 必需。
一个非负的整数,规定要提取的子串的第一个字符在stringObject 中的位置。
stop 可选。
一个非负的整数,比要提取的子串的最后一个字符在stringObject 中的位置多1。
如果省略该参数,那么返回的子串会一直到字符串的结尾。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式