public   class  ShareChar
  {
   public  String search(String s1,String s2)
    {
  String max  =   "" ;
   for ( int  i  =   0 ; i  <  s1.length(); i ++ )
    {
     for ( int  j  =  i + 1 ; j  <=  s1.length(); j ++ )
      {
      String sub  =  s1.substring(i,j);
       if ((s2.indexOf(sub) !=   - 1 ) &&  sub.length()  >  max.length())
        {
        max  =  sub;
      } 
    } 
  }   
   return  max;
  } 
  
   public   static   void  main(String[] args)
    {
    String s1  =   " abcdefghigj " ;
    String s2  =   " xyzabcdeigj " ;
    String output  =   new  ShareChar().search(s1,s2);
    System.out.println(output);
  } 

如果是S1=abcdehhhbcdef  s2= fabcdefggbcdef
那么这两个字符有2个最大的公共字符串“abcde”和“bcdef”
那么这个程序只能输出一个最大公共字符串
那这样个程序就不符合题目所说的了,应该两个都输出。
这样怎么办?

解决方案 »

  1.   

    import java.util.List;
    import java.util.ArrayList;
    import java.util.Iterator;public class ShareChar { public static List<String> search(String s1,String s2) 
        { 
    List<String> list = new ArrayList<String>();
    String max = "";
    for (int i = 0 ; i < s1.length(); i++) 

    for (int j = i+1 ; j <= s1.length(); j++) 

    String sub = s1.substring(i,j); 
    if ((s2.indexOf(sub) != -1) &&sub.length() >= max.length()) 

    if(sub.length()==max.length()){
    list.add(sub);
    max = sub;
    }else{
    list.clear();
    list.add(sub);
    max = sub;
    }


    }  
       return  list; 
       } 
    public static void main(String[] args) {
    String s1 = "abcdehhhbcdef";
    String s2 = "fabcdefggbcdef";
    Iterator<String> iterator = ShareChar.search(s1, s2).iterator();
    while(iterator.hasNext()){
    System.out.println(iterator.next());
    }
    }
    }