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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 吴波 于 2013-4-27 16:40 编辑

//获取两个字符串中最大相同子串
class StringDemo
{
public static String getMaxSubString(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++)
   /*
   可能有人会想z在这里代表什么?
    答:z在这里代表的是角标,并且是尾角标
   可能有人又会问z角标既然是尾角标,为什么会把min.length()-x赋给z,为什么不是min.length()-1-x?
    答:个人认为影响这里的是下面用到的substring(begin,end)方法,
        由于substring(begin,end)是一个包含头却不包含尾的方法,尾角标是取不到的,
     所以不能用min.length()-1-x。
   可能有人还会想为什么z!=min.length()+1,会让循环停下来?
    答:其实这也是受到substring(begin,end)方法的影响,min.length()这个尾角标对应的值是不可能取得到的
     但min.length()+1的话,min.length()这个尾角标对应的值就能取到
     由于字符串中只能取到min.length()-1的值,所以只有z!=min.length()+1才会让循环停下来。
   这三点明白了的同学,其他的就很好理解了。如果觉得本人写的有用的话,求给个赞,鼓励下俺。呵呵
   */
   {
    String temp = min.substring(y,z);
    if(max.contains(temp))
     return temp;
   }
  }
  return "";
}
public static void sop(String str)
{
  System.out.println(str);
}
public static void main(String[] args)
{
  String s1="skjfoiasoewnwor ld kadsjfoiinas";
  String s2="ksdjifiwwor ld sjaldkfj";
  sop(getMaxSubString(s1,s2));
}
}

8 个回复

倒序浏览
不错,支持一个
回复 使用道具 举报
可以借鉴下
回复 使用道具 举报
lipingan0520 发表于 2013-4-27 19:37
不错,支持一个

谢谢支持
回复 使用道具 举报
hyw840705183 发表于 2013-4-27 19:54
可以借鉴下

喜欢就好
回复 使用道具 举报
我有个更好的
回复 使用道具 举报
吴波 中级黑马 2013-4-27 20:06:19
7#
袁梦希 发表于 2013-4-27 20:05
我有个更好的

发来看看
回复 使用道具 举报
吴波 发表于 2013-4-27 20:06
发来看看

http://bbs.itheima.com/thread-15633-1-1.html
回复 使用道具 举报
吴波 中级黑马 2013-4-27 20:30:37
9#
袁梦希 发表于 2013-4-27 20:06
http://bbs.itheima.com/thread-15633-1-1.html

果然经典
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马