工作需要 求大家帮忙写个程序我是学C++的  不懂JAVA编写一个Java应用程序,对于给定的一个字符串的集合,格式如:
    {aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}
要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出:
{aaa bbb ccc ddd hhh},{eee fff}, {ggg}
分析问题,描述你解决这个问题的思路、处理流程,以及算法复杂度。
编程实现题目要求的集合合并。

解决方案 »

  1.   

    如果用过C++的STL的话就知道了,很好实现的
      

  2.   

    哪位好心人 帮我用JAVA写个 
    真心求助
      

  3.   

    终于发了一天的时间,把所有的情况都包括了,给我加分吧。
    package StringJiao;import java.util.ArrayList;
    import java.util.List;public class Str {
        private List<String> list;
        private String str;
    public Str(List<String> list,String str) {
    this.list = new ArrayList<String>();
    String[] s=str.split(" ");
    for(String ss:s){
    this.list.add(ss);
    }
    }
    public List<String> getList() {
    return list;
    } public void setList(List<String> list) {
    this.list = list;
    } public String getStr() {
    return str;
    } public void setStr(String str) {
    this.str = str;
    }
        
    }
    package StringJiao;import java.util.ArrayList;
    import java.util.List;public class Test { /**编写一个Java应用程序,对于给定的一个字符串的集合,格式如: 
        {aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh} 
        要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出: 
          {aaa bbb ccc ddd hhh},{eee fff}, {ggg} 
     * @param args
     */
    private static List<Str> strs;
    private static String[] arr;
    private static int beg=-1;     //通过判断beg做为数组的开始长度
    private static int end=0;      //end运行一次work()end长度。
    private static boolean flag=true;
    public static void main(String[] args) {
    arr=new String[]{"{aaa bbb ccc}","{bbb ddd}","{eee fff}","{ggg}","{ddd hhh fff}"};
    while(flag){
    work();
    }
    }
        public static void work(){
        
         strs=new ArrayList<Str>();
         beg=arr.length;
         for(int i=0;i<arr.length;i++){
         String str=arr[i];
         String str1=fenli(str);        //将字符串中的"{"和"}"去掉
         List<String> list=null;
         strs.add(new Str(list,str1));  //把arr中每个string加到一个集合里面
         }
        
           for(int j=0;j<strs.size();j++){
            Str aStr=strs.get(j);
            for(int k=j+1;k<strs.size();k++){
            Str bStr=strs.get(k);
            if (isChongdie(aStr, bStr)) {
      FindOutNOChongdieString(aStr, bStr);
      strs.remove(bStr);
      }
            }
           }
           String aString="";
           for(int i=0;i<strs.size();i++){                   //最后答案输出
                Str sss=strs.get(i);
                aString+="\"{";
             for(int m=0;m<sss.getList().size();m++){
              aString+=sss.getList().get(m);
              if (m!=sss.getList().size()-1) {
    aString+=" ";
    }
             }
             aString+="}\"";
             if (i!=strs.size()-1) {
    aString+=",";
    }
           }
           String[] array=aString.split(",");
           for(int i=0;i<array.length;i++){
            arr[i]=array[i];                            //重新给arr赋值
           }
           end=array.length;
           if (beg!=end) {
      arr=array;
       }else if(beg==end){                             //如果数组长度不变说明,已经是最后的答案了
       flag=false;
       System.out.println(aString);
       }
           
        }
        
        public static String fenli(String str){            //将字符串中的"{"和"}"去掉
         int begin=str.indexOf("{");
         int end=str.indexOf("}");
         return str.substring(begin+1,end);
        }
        
        public static boolean isChongdie(Str str1,Str str2){  //判断arr 是否有相同的元素 例如"{aaa,bbb}" "{bbb,ccc}"有相同
         for(int i=0;i<str1.getList().size();i++){
         String t1=str1.getList().get(i);
        
         for(int j=0;j<str2.getList().size();j++){
         String t2=str2.getList().get(j);
         if (t1.equals(t2)) {
    return true;
    }
         }
         }
         return false;
        }
        public static void FindOutNOChongdieString(Str str1,Str str2){  
         String string="";
         for(int i=0;i<str1.getList().size();i++){
         String t1=str1.getList().get(i);
         for(int j=0;j<str2.getList().size();j++){
         String t2=str2.getList().get(j);
         if (t1.equals(t2)) {
    str2.getList().remove(t1);          //根据相同元素将str2对应的元素删除
    }
         }
         }
         for(int k=0;k<str2.getList().size();k++)
         {
         str1.getList().add(str2.getList().get(k));  //将str2中不相同的元素加到str1里
         }
        }
    }
      

  4.   

    该题首先把数组拆分,然后放进一个数组里。把交集的合在一起,然后把两个加起来。例如str1={aaa,bbb};str2={bbb,ccc},交后变成了str1={aaa,bbb,ccc}.应该将str2删除掉