黑马程序员技术交流社区
标题:
感觉老师讲的有问题
[打印本页]
作者:
海世山盟
时间:
2014-4-3 16:17
标题:
感觉老师讲的有问题
public static String maxSubstring(String s1,String s2){
String max,min;
max=(s1.length()>s2.length())? s1:s2;
min=(max==s1)? s2:s1;
System.out.println(max+"....."+min);
for(int x=0;x<min.length();x++){
for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++){
String temp=min.substring(y,z);
temp.toCharArray();
//String[] q=null;
//System.out.println("temp="+temp);
if(max.contains(temp))
//System.out.println("结果是"+temp);
return temp;
}
}
return null;
}
这是老师讲的寻找两个字符串中相同的最大的字符串。
问题点:
假如:s1="kiokk"; s2="kib3oktr";按照该程序的结果应该是只有ki(因为当判断到ki相同时,就会因为return而跳出循环了),这就导致后边还有一个ok判断不到。我想能不能把每一次temp的值装到一个字符数组里面再来判断,但是这样的话效率有点低。有没有其他高效的呢?求教。
作者:
chen_x
时间:
2014-4-3 19:54
试一下这样修改下:
import java.util.*;
class Test5{
public static void main(String[] args){
String s1="kiokk";
String s2="kib3oktr";
System.out.println(maxSubstring(s1,s2));
}
public static ArrayList maxSubstring(String s1,String s2){
String max,min;
int len=0; //用于保存最大子串的长度
ArrayList<String> al=new ArrayList<String>(); //用于存储最大子串
max=(s1.length()>s2.length())? s1:s2;
min=(max==s1)? s2:s1;
System.out.println(max+"....."+min);
for(int x=0;x<min.length();x++){
for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++){
String temp=min.substring(y,z);
temp.toCharArray();
//String[] q=null;
//System.out.println("temp="+temp);
if(max.contains(temp)){
//System.out.println("结果是"+temp);
if(temp.length()>=len){ //代码首先产生的相同子串的长度肯定是最大的,所以这样判断 没问题,后续还有相同长度的子串时也加入到al中
len=temp.length();
al.add(temp);
}
}
}
}
return al;
}
}
复制代码
打印结果是[ki,ok]
作者:
╰青青子佩ˊゝ
时间:
2014-4-3 20:22
你是不是理解错了“找两个字符串中相同的最大的字符串”的意思?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2