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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 寐海流风 中级黑马   /  2014-6-11 22:36  /  1388 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 寐海流风 于 2014-6-14 10:33 编辑

在自学过程中毕老师讲了一个方法:获得两个字符串里,相等的子串中的最长的那个。
然后我自己先写了代码去实现这个方法,但是获得不了正确的结果,思考了好久也没能解决,期待高手帮忙看下代码:)(自己写了10多分钟的代码,不想就这么错下去啊,想改正过来):

public static String getLong(String s1,String s2) {
    String sMax,sMin;
    String ss = null;
    sMax=s1.length()>=s2.length()?s1:s2;
    sMin=s1.length()>s2.length()?s2:s1;
    if(sMax.contains(sMin)) {
       return sMin;
    }else {
       for(int x=sMin.length();x>1;x--) {
          for(int y=0;y<=sMin.length()-x;y++) {
             if(sMax.contains(sMin.substring(y,x+y))) {
                ss = sMin.substring(y,x+y);;
             }
          }
       }   
    }
    return ss;
}

如:"jfowhroihefo","jfowshroihf"这两个字符串,得到最大相等子串应该是“hroih”。
但是我自己的方法得到的是“ih”。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

6 个回复

倒序浏览
加一个跳出到最外层循环,不要匹配了还在匹配中匹配

public class test1
{
         public static void main(String[] args) throws Exception
         {
                String s2=getLong("jfowhroihefo","jfowshroihf");
                System.out.println(s2);
         }
         
         public static String getLong(String s1,String s2)
         {
                    String sMax,sMin;
                    String ss = null;
                    sMax=s1.length()>=s2.length()?s1:s2;
                    sMin=s1.length()>s2.length()?s2:s1;
                    if(sMax.contains(sMin))
                    {
                       return sMin;
                    }
                    else
                    {
                       out:
                       for(int x=sMin.length();x>1;x--)
                       {
                          for(int y=0;y<=sMin.length()-x;y++)
                          {
                             if(sMax.contains(sMin.substring(y,x+y)))
                             {
                                ss = sMin.substring(y,x+y);
                                break out;
                             }
                          }
                       }   
                    }
                    return ss;
                }
       
}

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报 1 0
axuan 发表于 2014-6-11 23:56
加一个跳出到最外层循环,不要匹配了还在匹配中匹配

public class test1

谢谢,你的画龙点睛确实让我一下顿悟了这个关键点。:)
非常受用!
回复 使用道具 举报
  1. package com.itcast.day01;

  2. public class Demo9 {

  3.         public static void main(String[] args) {
  4.                 // TODO Auto-generated method stub
  5.                 String str1="hroih";
  6.                 String str2="daaroihsda";
  7.                
  8.                 //调用方法并将之输出
  9.                 System.out.println(getLong(str1,str2));
  10.         }
  11.        
  12.         //功能函数封装
  13.         public static String getLong(String s1, String s2) {
  14.                 String sMax, sMin;
  15.                 String ss = null;
  16.                 sMax = s1.length() >= s2.length() ? s1 : s2;
  17.                 sMin = s1.length() > s2.length() ? s2 : s1;
  18.                 //健壮性判断
  19.                 if (sMax.contains(sMin))
  20.                         return sMin;
  21.                 //对长度相对小的字符串进行遍历
  22.                 for (int x = sMin.length(); x > 1; x--) {
  23.                         for (int y = 0; y <= sMin.length() - x; y++) {
  24.                                 if (sMax.contains(sMin.substring(y, x + y))) {
  25.                                         ss = sMin.substring(y, x + y);
  26.                                         //要把获取到的满足条件的子串直接返回
  27.                                         return ss;
  28.                                 }
  29.                         }
  30.                 }
  31.                 return "没有相同的子串";
  32.         }

  33. }
复制代码


这样子结果就正确了,少侠注意查收~
回复 使用道具 举报
love~陌 发表于 2014-6-12 10:58
这样子结果就正确了,少侠注意查收~

谢谢。你的这个也返回正确的结果。:)
回复 使用道具 举报
寐海流风 发表于 2014-6-12 11:12
谢谢。你的这个也返回正确的结果。

我看到一个“也”字,那么少侠之前是错在哪里了?满足我的好奇心吧
回复 使用道具 举报
love~陌 发表于 2014-6-12 12:17
我看到一个“也”字,那么少侠之前是错在哪里了?满足我的好奇心吧

我是说,上面@axuan纠正了我错误的地方,现在你也纠正了我错误的地方。你们的返回结果都正确的,哈哈。:L
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马