得出两个字符串的最大公串,
如“afegdajve” 和 “teeregdajp”的最大公串是 egdaj问了好久了  也没有一个实实在在来点代码的   鄙视中  
神马理论的    神马这个应该这样这样的  
神马 先遍历 然后取最大公串  这类答复就不要上来了一句话    只看代码    小弟急用     谢谢   
高高在上的不愿意敲个代码给看的别发表评论了就   再次谢谢
非常谢谢   给力的来啊    
 小弟分不多    请见谅!!!!!!!!!!

解决方案 »

  1.   


    public class Test {
    public static void main(String[] args) {
    String s1 = "afegdajve",s2="teeregdajp";
    String smallStr,largeStr;
    if(s1.length() > s2.length()){
    smallStr = s2;
    largeStr = s1;
    }else {
    smallStr = s1;
    largeStr = s2;
    }
    String str;
    int max = 0,count = 0;
    String resultStr = null;
    for(int i = 0;i < smallStr.length();i++){
    str = String.valueOf(smallStr.charAt(i));
    count = 0;
    for(int j = i + 1;j < smallStr.length();j++){
    if(largeStr.contains(str)){
    count++;
    if(count > max){
    max = count;
    resultStr = str;
    }
    str += String.valueOf(smallStr.charAt(j));
    }
    else {
    break;
    }
    }
    }
    System.out.println("max same str : " + resultStr + " size : " + resultStr.length());
    }
    }
      

  2.   

    http://topic.csdn.net/u/20120422/21/04688ff1-c4f1-4fce-82da-901c53950fd7.html?17074
      

  3.   

    以前帮别人写过,又改进了一点。。嘿嘿public class TestSequence{
    public static void main(String args[]) {
    String str1 = "afegdajve";
    String str2 = "teeregdajp";
    String temp = str1.length() > str2.length() ? str2 : str1;
    String temp2 = temp == str1 ? str2 : str1;
    int index2 = temp.length();
    while (true) {
    for (int i = 0;i+index2<temp.length();i++){
    if (temp2.contains(temp.substring(i,i+index2))){
    System.out.println(temp.substring(i,i+index2));
    return;
    }
    }
    index2--;
    if(index2 == 0){
    System.out.println("find nothing");
    return;
    }
    }
    }
    }
      

  4.   

    这个是成熟的算法了
    思路就是定一个2维数组,如  a f e g d a j v e
    t 0 0 0 0 0 0 0 0 0
    e 0 0 1 0 0 0 0 0 1
    e 0 0 1 0 0 0 0 0 1
    r 0 0 0 0 0 0 0 0 0
    e 0 0 1 0 0 0 0 0 1
    g 0 0 0 2 0 0 0 0 0
    d 0 0 0 0 3 0 0 0 0
    a 1 0 0 0 0 4 0 0 0
    j 0 0 0 0 0 0 5 0 0
    p 0 0 0 0 0 0 0 0 0
    比如横向是字符串1,纵向是字符串2,然后按照2维数组遍历,如果某个位置的横向字符和纵向字符相同,则该位置的值等于其上一个对角位置的值加1,如上面的2,3,4,5,分别等于上一个对角位置的值+1,如果某个位置的横向和纵向字符串的值不同,则该位置的值为0
    找到最大的值得位置,沿着其对角线,从1位置开始到最大值位置,分别取横向或纵向的字符组成字符串,就是最大相同的字串了
    代码例子
    public class Test {
        public static void main(String[] args) throws Throwable {
            String s1 = "afegdajve";
            String s2 = "teeregdajp";
            char[] c1 = s1.toCharArray();
            char[] c2 = s2.toCharArray();        int max = 0, row = 0, col = 0;
            int[][] matrix = new int[c1.length+1][c2.length+1]; //定义2维数组
            for (int i=1; i<matrix.length; i++) {
                for (int j=1; j<matrix[i].length; j++) {
                    if (c1[i-1] == c2[j-1]) { //横向字符与纵向字符相同的时候
                        matrix[i][j] = matrix[i-1][j-1] + 1; //该位置的值等于上个对角位置的值加1
                        if (matrix[i][j] > max) {//跟踪最大值
                            max = matrix[i][j];
                            row = i;
                            col = j;
                        }
                    }
                }
            }        if (row >= max) { //如果找到字串
                StringBuilder buf = new StringBuilder();
                for (int i=row-max; i<row; i++) { //随便取横向或纵向的字符串都可以,这里取横向
                                                        //取纵向就是i从col-max到col位置
                    buf.append(c1[i]);
                }
                System.out.println(buf);
            }
        }
    }
      

  5.   

    2楼那个对不住了 点错了非常感谢各位帮忙 
    我又找到一个短一些的  分享下 
      String a ="fegdajv";
         String b ="teeregdajp";      for(char i :a.toCharArray() ){
           if(b.indexOf(i)!=-1){
             System.out.print(i);
           }
         }
    再次感谢大家的解答  
      

  6.   


    public static void main(String[] args) {
    String s1 = "afegdajve";
    String s2 = "teeregdajp"; // egdaj
    String result = "";
    String tmp = "";
    for (int i = 0; i < s1.length(); i++) {
    for (int j = i + 1; j <= s1.length(); j++) {
    tmp = s1.substring(i, j);
    if (s2.contains(tmp) && (tmp.length() > result.length())) {
    result = tmp;
    }
    }
    }
    System.out.println(result);
    }
      

  7.   

    public static void main(String args[]) throws Exception{

    String str1 = "asdeferdere";
    String str2 = "cvvsdefrrt";
    int m = str1.length();
    int n = str2.length();
    int maxLen = 0;
    int sIndex = -1; for(int i=0; (i+maxLen)<m ; i++){
    int tmp = 0;
    for(int j=0; j<n; j++){
    if((i+tmp)<m && str1.charAt(i+tmp) == str2.charAt(j)) 
    tmp++;
    else{
    if(tmp > maxLen){
    maxLen = tmp;
    sIndex = i;
    }
    tmp = 0;

    }
    }

    }

    }