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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于腾飛 中级黑马   /  2013-3-30 16:13  /  1701 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 于腾飛 于 2013-3-30 16:55 编辑

class StringTest
{        
        public static String getMaxString(String s1,String s2)
        {
                String max ="" ,min ="";
                max = (s1.length() > s2.length())?s1:s2;
                min =(max==s1)?s2:s1;

                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);
                                if(max.contains(temp)) //这是判断MAX中是否包含了temp
                                        return temp;
                        }
                }
                return "";
        }
        public static void main(String[] args)
        {
                String s1="weioxthellodskfjsfj";
                String s2="wqeixhf9hellocb0";

                System.out.println(getMaxString(s1,s2));
        }
}
结果是 hello   
但是S1也包含了S2其他子字符串,如 ello,它为什么没有被打印出来?这个 .contains()方法就是判断最大的字符串?



6 个回复

倒序浏览
contains只是判断是否包含子串,返回是boolean类型的值。你是要找最大的最大子串,你的代码有问题。
那你的数据用一下;
String s1="weioxthellodskfjsfj";
String s2="wqeixhf9hellocb0";
Max = s1;
Min = s2;

你的temp 截取的子串方法错误,
你要从两边同时截取,也就是每次截取的子串的长度是一样的,从子串长度为Min.length()开始截取;下一次截取所有长度Min.length()-1的子串;下次再截取所有长度为
Min.lengh()-2的子串。就这样找知道长度为0。找到一个就return  temp;能够保证是最大的子串。
而你的不能保证是最大子串,你是返回的是第一个搜索到的子串。和你的要求不符合。
回复 使用道具 举报
似水像火 发表于 2013-3-30 16:23
contains只是判断是否包含子串,返回是boolean类型的值。你是要找最大的最大子串,你的代码有问题。
那你的 ...

我的就是从两边截取的,代码没有问题,请仔细阅读!不过通过你这么一解释,我知道我问题的答案了!谢啦!
回复 使用道具 举报
这个适应为内置for语句中添加了if判断,并使用return返回数值,并结束循环。所以说当你的for循环找到hello这个最长相同子串时就会结束循环并返回值。
你可以将return temp改成System.out.println(temp);然后再看看效果,你应该就更清楚了。
回复 使用道具 举报
万蕾 发表于 2013-3-30 17:01
这个适应为内置for语句中添加了if判断,并使用return返回数值,并结束循环。所以说当你的for循环找到hello ...

好的 看到了!谢谢
回复 使用道具 举报
  1. class StringTest
  2. {        
  3.         public static String getMaxString(String s1,String s2)
  4.         {
  5.                 String max ="" ,min ="";
  6.                 max = (s1.length() > s2.length())?s1:s2;
  7.                 min =(max==s1)?s2:s1;

  8.                 for (int x=0;x<min.length() ;x++ )
  9.                 {
  10.                         for (int y=0,z=min.length()-x ;z!=min.length()+1 ;y++,z++ )
  11.                         {
  12.                                 String temp = min.substring(y,z);
  13.                                 if(max.contains(temp)) //这是判断MAX中是否包含了temp
  14.                                         //return temp;
  15.                                         System.out.print(temp+"---");//结果为:hello---hell---ello---hel---ell---llo---ei---he---el---ll---lo---w---e---i---x---h---f---h---e---l---l---o---

  16.                         }
  17.                 }
  18.                 return "";
  19.         }
  20.         public static void main(String[] args)
  21.         {
  22.                 String s1="weioxthellodskfjer";
  23.                 String s2="wqeixhf9hellocb";

  24.                 System.out.println(getMaxString(s1,s2));
  25.         }
  26. }
复制代码
因为第一次temp=hello时return就跳出了循环所以就看不到包含的其他字符串
我用输出语句替换一下就可以看出是可以检测出来所有的包含的字符串
下面可以输出所有包含字符串的代码
  1. class StringTest
  2. {        
  3.         public static void getMaxString(String s1,String s2)
  4.         {
  5.                 String max ="" ,min ="";
  6.                 max = (s1.length() > s2.length())?s1:s2;
  7.                 min =(max==s1)?s2:s1;

  8.                 for (int x=0;x<min.length() ;x++ )
  9.                 {
  10.                         for (int y=0,z=min.length()-x ;z!=min.length()+1 ;y++,z++ )
  11.                         {
  12.                                 String temp = min.substring(y,z);
  13.                                 if(max.contains(temp)) //这是判断MAX中是否包含了temp
  14.                                         //return temp;
  15.                                         System.out.print(temp+"--");//打印所包含的的字符串
  16.                         }
  17.                 }
  18.         }
  19.         public static void main(String[] args)
  20.         {
  21.                 String s1="weioxthellodskfjer";
  22.                 String s2="wqeixhf9hellocb";

  23.                getMaxString(s1,s2);
  24.         }
  25. }
复制代码
结果为:hello--hell--ello--hel--ell--llo--ei--he--el--ll--lo--w--e--i--x--h--f--h--e--l--l--o--
回复 使用道具 举报
高新星 发表于 2013-3-30 17:30
因为第一次temp=hello时return就跳出了循环所以就看不到包含的其他字符串
我用输出语句替换一下就可以看出 ...

谢谢  懂啦!:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马