A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 海世山盟 中级黑马   /  2014-4-3 16:17  /  969 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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的值装到一个字符数组里面再来判断,但是这样的话效率有点低。有没有其他高效的呢?求教。

2 个回复

倒序浏览
试一下这样修改下:
  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]
回复 使用道具 举报
你是不是理解错了“找两个字符串中相同的最大的字符串”的意思?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马