黑马程序员技术交流社区

标题: 字符串中是否包含一个字串的问题 [打印本页]

作者: 于腾飛    时间: 2013-3-30 16:13
标题: 字符串中是否包含一个字串的问题
本帖最后由 于腾飛 于 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()方法就是判断最大的字符串?




作者: 刘胜寒    时间: 2013-3-30 16:23
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:54
似水像火 发表于 2013-3-30 16:23
contains只是判断是否包含子串,返回是boolean类型的值。你是要找最大的最大子串,你的代码有问题。
那你的 ...

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

好的 看到了!谢谢
作者: 高新星    时间: 2013-3-30 17:30
  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:39
高新星 发表于 2013-3-30 17:30
因为第一次temp=hello时return就跳出了循环所以就看不到包含的其他字符串
我用输出语句替换一下就可以看出 ...

谢谢  懂啦!:handshake




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