如何查找两个字符串中是否有相同的部分,比如说存在两个字符串
Str1="abcdefg"
Str2="bcde"
那么他们相同的部门就包括b,c,d,e,bc,cd,de,bcd,cde,bcde
请问这样代码要如何编写

解决方案 »

  1.   

    lcs之,
    网上代码很多
      

  2.   

    abcdefg  abfgbcd 会找出ab fg bcd 三对最长。 排列出 a b c d f g ab bc cd bcd fg 
      

  3.   

    我给的例子可能给大家产生了误解,我这里解释一下:
    str1="abcdefd"
    str2="bcefd"
    那么相同的部分包括:b,c,e,f,d,bc,ef,fd,efd
    相同的部分是要包括所有有相同的部分,不是说最长公共子串,还有请给出具体的代码
      

  4.   


    import java.util.ArrayList;
    import java.util.List;
    public class Search {
    public static void main(String[] args) {
    String str1="abcdefg";
    String str2="bcde";

    //查找匹配的子串
    List<String> list = search(str1, str2);

    //打印结果
    for(String str : list) {
    System.out.print(str + " ");
    }
    System.out.println();
    }

    /**
     * 查找str1和str2中相同的部分,其思路是在长度短的一个字符串中依次找长度为1,2,...,n的子字符串,
     * 然后再长度长的字符串中看是否包含此字符串,包含的话,就加入list,否则继续。最后返回list
     * @param str1 待查找的字符串
     * @param str2 待查找的字符串
     * @return 包含相同部分的list
     */
    private static List<String> search(String str1,  String str2) {
    String temp = "";
    List<String> list = new ArrayList<String>();
    //如果str1的长度小于str2的长度,则交换,方便后面的处理
    if(str1.length() > str2.length()) {
    temp = str1;
    str1 = str2;
    str2 = temp;
    }
    for(int i=1; i<=str1.length(); i++) {
    for(int j=0; j<=str1.length()-i; j++) {
    temp = str1.substring(j, j+i);
    if(str2.contains(temp)) {
    list.add(temp);
    }
    }
    }

    return list;
    }
    }
      

  5.   

    这是最长公共子序列问题啊,我前几天刚写了一篇文章,就是关于这个的。看看吧,顺便帮我增添点人气,谢了!!
    http://blog.csdn.net/lxy15329/archive/2010/12/06/6058581.aspx