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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马19我最牛 中级黑马   /  2013-4-6 22:13  /  1986 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 许兵兵 于 2013-4-7 20:35 编辑
  1. /*
  2. *
  3. 获取两个字符串的最大相同子串。
  4. "sdfsabcdedgdfgwkketrfw"
  5. "rabcdew"
  6. */
  7. public class Test {

  8.         public static void main(String[] args) {
  9.                 String s1 = "sdfsabcdedgdfgwkketrfw";// 22
  10.                 String s2 = "rabcdew";// 7
  11.                 String s3 = getCut(s2, s1);
  12.                 System.out.println(s3);

  13.         }
  14. /**
  15. * @param str
  16. * @param str1
  17. * @return
  18. * 思路:1.选出最大长度的字符串,因此我认为应该是从最长开始截取,然后判断是不是在另外一个字符串中,
  19. *                 如果截取的长度在另外一个字符串中的话,就直接不用再判断了;否则如果从最小开始截取的话,
  20. *                 那么有可能截取的很短的字符串,也在长的字符串中,那么再往下,再判断多少次无法控制,
  21. *                 无法确定现在截取的是否是最长,只能确定现在截取的字符串在另外一个字符串中.
  22. *            2.既然要从最长开始截取的话,那么我们肯定是先保证一个长度,然后再取出所有此长度的字符串,
  23. *                 因此外循环我们是确定长度的.
  24. *            3.那么内循环,我们就用来截取外循环确定长度的字符串然后比较.
  25. *     4.既然长度i固定,那么截取的时候就从一端开始一个挨着一个截取,
  26. *             然后比较str1.substring(a, b)
  27. *      从尾部开始:
  28. *      b = str1.length() - 1
  29. *      a = b- i        那么长度就是固定的I
  30. *      截取的下一段就是substring(a--, b--)
  31. *      如果b<0那么结束本次循环
  32. *      从前段开始:
  33. *      a =0
  34. *      b =i
  35. *      截取的下一段就是substring(a,b)
  36. *      如果b>str1.length() - 1  结束本次循环
  37. *     5.因为我们是从截取最长的字符串开始判断,因此如果出现截取的字符串出现的另外一个字符串中,
  38. *     那么我们就直接跳出所有循环(其他的已经没有必要再判断了).
  39. *     6.如果判断了所有的,最后发现截取的所有都不在另外一个字符串中,那么我们就需要输出,null
  40. */
  41.         private static String getCut(String str, String str1) {
  42.                 String temp = null;
  43.                 A:for (int i = str1.length()-1; i > 0; i--) {
  44.                         B:for (int b = str1.length() - 1, a = b- i; a >= 0; a--,b--) {
  45.                                 if (str.contains(str1.substring(a, b))) {
  46.                                         temp=str1.substring(a, b);
  47.                                         break A;
  48.                                 }
  49.                         }
  50.                 }
  51.                 if (null==temp) {
  52.                         System.out.println("他们没有相同的字符串");
  53.                 }
  54.                 return temp;
  55.         }
  56. }
复制代码
这是我对这个题目的思路,感觉应该对着.   这里我跳出循环用的是break    还有那种方法能跳出循环A,我知道return   ,可是不怎么会用.谁给我讲讲!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

8 个回复

正序浏览
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
根据我的理解,你能用return temp;这句话用在你if判断里面,来代替break A;这一句。那么,这个程序就直接会返回一个值给方法。
具体:
private static String getCut(String str, String str1) {                String temp = null;
        A:for (int i = str1.length()-1; i > 0; i--) {


                B:for (int b = str1.length() - 1, a = b- i; a >= 0; a--,b--) {
                        if (str.contains(str1.substring(a, b))) {
                                temp=str1.substring(a, b);

                              return temp;//因为已经得到返回值,所有方法接受返回值,这个方法结束。如果没执行到这里,那么这个方法会继续执行下面的代码。
                        }
                        
                }
        }
        if (null==temp) {
         System.out.println("他们没有相同的字符串");
        }
  return temp;
        
        }               
               

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
许兵兵 发表于 2013-4-7 17:12
也就是说如果这个方法的返回值是void  那么也可以用return  只不过没有返回值? ...

对啊。呵呵
回复 使用道具 举报
梁胜海 发表于 2013-4-7 01:14
return在某些方面和break很想。我们知道在方法声明中,其实是有默认隐藏return的。当执行到return整个方法 ...

也就是说如果这个方法的返回值是void  那么也可以用return  只不过没有返回值?
回复 使用道具 举报
return在某些方面和break很想。我们知道在方法声明中,其实是有默认隐藏return的。当执行到return整个方法结束。return还可以返回类型值,没有返回值直接分号结束。在你这种多套嵌套循环中,可以使用循环标记来跳出循环。一般这种用法开发很少用到。
回复 使用道具 举报
许兵兵 发表于 2013-4-6 23:02
嗯,知道了,就是说如果在第49行return返回了,就是直接返回到getCut函数,不过如果这样的话,后面执行不到无 ...

嗯,直接return temp; 哎,技术分不好拿啊!共同加油!
回复 使用道具 举报
杨成 发表于 2013-4-6 22:55
return:结束当前的函数,并返回一个值。看清是结束当前函数!你想把reutrn用到第49行是不科学的,因为这样 ...

嗯,知道了,就是说如果在第49行return返回了,就是直接返回到getCut函数,不过如果这样的话,后面执行不到无所谓啊,因为如果temp有值了,那就不用后面的IF判断了.
回复 使用道具 举报
return:结束当前的函数,并返回一个值。看清是结束当前函数!你想把reutrn用到第49行是不科学的,因为这样整个函数就结束了,后面的if(null==temp){}就执行不到了!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

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