黑马程序员技术交流社区

标题: 感觉老师讲的有问题 [打印本页]

作者: 海世山盟    时间: 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
试一下这样修改下:
  1. import java.util.*;
  2. class Test5{
  3. public static void main(String[] args){
  4.          String s1="kiokk";
  5.          String s2="kib3oktr";
  6.          System.out.println(maxSubstring(s1,s2));
  7. }
  8. public static ArrayList maxSubstring(String s1,String s2){
  9.                 String max,min;
  10.                 int len=0; //用于保存最大子串的长度
  11.                 ArrayList<String> al=new ArrayList<String>(); //用于存储最大子串              
  12.                 max=(s1.length()>s2.length())? s1:s2;
  13.                 min=(max==s1)? s2:s1;
  14.                 System.out.println(max+"....."+min);
  15.                 for(int x=0;x<min.length();x++){
  16.                         for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++){
  17.                                 String temp=min.substring(y,z);
  18.                                 temp.toCharArray();
  19.                                 //String[] q=null;
  20.                                  //System.out.println("temp="+temp);
  21.                                 if(max.contains(temp)){                                 
  22.                                 //System.out.println("结果是"+temp);
  23.                                 if(temp.length()>=len){ //代码首先产生的相同子串的长度肯定是最大的,所以这样判断 没问题,后续还有相同长度的子串时也加入到al中
  24.                                 len=temp.length();                                
  25.                                 al.add(temp);
  26.                                 }
  27.                                 }
  28.                                 
  29.                                 
  30.                 }
  31.                 }
  32.                 return al;
  33. }
  34. }
复制代码

打印结果是[ki,ok]
作者: ╰青青子佩ˊゝ    时间: 2014-4-3 20:22
你是不是理解错了“找两个字符串中相同的最大的字符串”的意思?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2