1. 两个字符串A 和B,  写程序实现 查找出 A 和B 中匹配最长的字符序列; 
=====★===我===是===题===目===间===的===小===分===隔===符===★===== 

解决方案 »

  1.   

    int index=0;
    int length=0;   for(int i=0;i<A.length();i++) {
        index=0;
        for(int j=0;j<B.length;j++) {
          while(true) { 
            if(A.charAt(i)==B.charAt(j)) {
             index++;
             i=i+1;
             j=j+1;
           }else{
             if(length<index) length=index;
             break;
           }
          
         }
      }
    }
      

  2.   

    首先可以肯定的是这个最长的字符序列只可能存在于短的字符串中,然后我把你的问题转换成求一个短字符串的子字符串的过程(比如一个字符串有3位,那么它的子字符串只可能有3+2+1位),然后再用indexOf方法来循环遍历。我的算法是把每个方法独立开来,这样有一点不好,就是当你得到最长的字符串的时候,其他的子字符串是白求了,你自己看看吧。
    import java.util.*;public class MaxString {
    static String[] sonString; //存储子串的数组,长度是该字符串长度的阶乘
    static List<String> list = new ArrayList<String>(); //存储最长子串的列表
    static int max = 1;  //记录最长子串的长度

    public static int sum(int i){
    if (i == 1)
    return 1;
    else
    return sum(i-1) + i;
    }

    public static String[] sonstring(String str){ //求短字符串的子串
    sonString = new String[sum(str.length())];
    int k = str.length();
    int count = 0;

    for(int i=0; i<k; i++){
    for(int j=k-1; j>=i; j--){
    sonString[count] = str.substring(i, j+1);
    count ++;
    }
    }
    return sonString;
    }

    public static List<String> findMax(String longStr, String shortStr){
    sonstring(shortStr);

    for(int i=0; i<sonString.length; i++){
    if (longStr.indexOf(sonString[i]) >= 0){
    if (sonString[i].length() > max){
    list.clear();
    max = sonString[i].length();
    list.add(sonString[i]);
    }
    else if (sonString[i].length() == max){
    list.add(sonString[i]);
    }
    }
    }
    return list;
    }

    public static void main(String args[]){
    String str1 = "abcdldedad";
    String str2 = "abdled33s";

    findMax(str1, str2);

    System.out.print(list.toString());
    }
    }
    结果:[ab, dl, ed]