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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

获取两个字符串中最大相同字串,我写成下面这样,达不到想要的结果..请问哪里错了呢???

public static String sameString_2(String str1,String str2)       
        {
                for(int x = 0;x<str1.length();x++)
                {
                        for(int y=0;y<=str1.length();y++)
                        {
                                String str = str1.substring(x,y);
                                if(str2.contains(str))
                                        return str;
                        }
                }
                return "";
        }

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
获取两个字符串中最大相同字串
if(str2.contains(str))
  return str;
你这里的意思是 只要str2包含str就返回str  而你截取的字符串中第一个符合此条件的就会返回,不一定是最大通大字串。

String str = str1.substring(x,y);
这个 substring(x,y);  这里如果循环继续的话x的值就会大于y的值,是会报异常的。
回复 使用道具 举报
次奥...终于弄白咋回事了...NND...今天是肿么了..老是短路..
代码调试完毕,求筒子们更优化的代码,求交流~~~
        public static String sameString_2(String str1,String str2)       
        {
                int num = 0;
                String temp ="";
                for(int x = 0;x<str2.length();x++)
                {
                       
                        for(int y=str2.length();y>x;y--)
                        {
                               
                                String str = str2.substring(x,y);

                                if(str1.contains(str)&&str.length()>num)
                                {
                                        num = str.length();
                                        temp = str;
                                }
                        }
                }
                return temp;
        }
回复 使用道具 举报
你的两个for循环  当x的值大于y时会产生错误,而且你要求的代码是获取str1和str2中的最大相同子串
  1. public static String sameString_2(String str1,String str2)        
  2.         {
  3.                 for(int x = 0;x<str1.length();x++)
  4.                 {
  5.                         for(int y=0,z=str1.length()-x;z!=str1.length()+1;y++,z++)//用y 和 z来截取str1  x来控制循环次数
  6.                         {
  7.                                 String str = str1.substring(y,z);
  8.                                 if(str2.contains(str))
  9.                                         return str;
  10.                         }
  11.                 }
  12.                 return "";
  13.         }
复制代码
代码可以这样写
回复 使用道具 举报
夏添 发表于 2013-3-7 02:19
次奥...终于弄白咋回事了...NND...今天是肿么了..老是短路..
代码调试完毕,求筒子们更优化的代码,求交流~~~ ...

毕老师好像有讲这题哦
这样做,从x=0开始,y从后面开始递减,获取的第一个符合字符串依然可能不是最大子串。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马