黑马程序员技术交流社区

标题: 获取两个字符串中最大的相同子串 [打印本页]

作者: 我能驾驭住    时间: 2012-6-10 11:12
标题: 获取两个字符串中最大的相同子串
package String.lianxi;
import java.lang.*;
public class ClassDemo4 {
/**
  * 获取两个字符串中最大的相同子串 s1="abcdhelloefg" s2="efhelloop" 得到hello
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
  String s1 = "abcdhelloefg";
  String s2 = "efhelloop";
  String s = getMaxstring(s1, s2);
  System.out.println("最大子串是" + s);
}
private static String getMaxstring(String s1, String s2) {
  // TODO Auto-generated method stub
  String max = " ";
  String min = " ";
  max = (s1.length() > s2.length() ? s1 : s2);//三元运算符,传过来两个字符,把最大串和小串比较出来
  min = (max == s1 ? s2 : s1);//大串是s1了,小串自然是s2
  for (int i = 0; i <min.length(); i++) {//循环小串
   for (int j = 0, z = min.length() - i; z!= min.length()+1; j++,z++) {
/*变量j是从开始截取 z是从未尾开始截取(因为是下标,所以要减i),条件这样写是因为比到超过这个长度就比完了,越界了
举例:s1="abhello" s2="fghello" 从fghello ghello fghell .....这样左减一个,右减一个比较,不会漏掉.....*/
    String temp = min.substring(j, z);//然后截取
    if (max.contains(temp)) {
     return temp;
    }
/*min = min.substring(j, z);//然后截取
    if (max.contains(min)) {
     return min;//我这样写,编译没有错,怎么输出是null呢?不理解,这样不也一样吗?
    }*/

   }
   
  }
  return null;
}
}


作者: 张洁    时间: 2012-6-10 11:20
楼主再试下,小妹我运行结果怎么是对的额。。。
作者: 郑传庆    时间: 2012-6-10 12:07
想要得到相同的子字符串,就要用一个字符串变量保存截取的字符

public static void main(String[] args) {
                String s1 = "abcdhelloefg";
                String s2 = "efhelloop";
                String s = getMaxstring(s1, s2);
                System.out.println("最大子串是" + s);
                int i = 11;
                int a = 2;
                int v = i > a ? i : a;
                System.out.println(v);
        }

        private static String getMaxstring(String s1, String s2) {
                String max = " ";
                String min = " ";
                max = (s1.length() > s2.length() ? s1 : s2);
                min = (max == s1 ? s2 : s1);
                System.out.println(min);
                for (int i = 0; i < min.length(); i++) {
                        for (int j = 0, z = min.length() - i; z != min.length() + 1; j++, z++) {
                                // String temp = max.substring(j, z);
                                // if (max.contains(temp)) {
                                // return temp;
                                // }
                                /*
                                 * 想要得到相同的子字符串,就要用一个字符串变量保存截取的字符
                                 */
                                String mins = min.substring(j, z);
                                if (max.contains(mins)) {
                                        return mins;
                                }
                        }

                }
                return null;
        }
作者: 吴小东    时间: 2012-6-10 13:26
我把你的错误简化了一下 你看看下面就清楚了 每循环一次你的min值都会变化,循环条件一直在变
String min ="adfsdfsdf";
for (int i = 0;i<min.length ;i++ )
{
        min = min.substring(i,i+10);
}




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