这个数据是部门的编号,分上下级,通过编号来区分,比如:
 部门1     :   01
  下级部门1 :  011
  下级部门2 :  012
   下下级部门1:0121
 部门2     :   02
  下级部门1 :  021
   下下级部门1:0211
   下下级部门1:0212
    下下下级部门1:02121
  下级部门2 :  022
   下下级部门1:0221现在我要通过一系列的编号组合出最少的部门组合(存在上级部门就舍去下级部门)
比如:
01
011
02
021
022
031
0412
05
0513
0611
06112
我得出的数据应为:
01
02
031
0412
05
0611求算法。最好是java版本的。

解决方案 »

  1.   


    public static void main(String[] args) {
    String[] array = { "01", "011", "02", "021", "022", "031", "0412",
    "05", "0513", "0611", "06112" };
    Arrays.sort(array);
    List<String> list=new ArrayList<String>();
    list.addAll(Arrays.asList(array));
    int i=0;
    int j=1;
    for(i=0; i<array.length;i++){
    for(;j<array.length;j++){
    if(array[j].startsWith(array[i])){
    list.remove(array[j]);
    }else{
    i=j-1;
    j++;
    break;
    }
    }
    }
    }
      

  2.   

    最后再加个输出、public static void main(String[] args) {
    String[] array = { "01", "011", "02", "021", "022", "031", "0412",
    "05", "0513", "0611", "06112" };
    Arrays.sort(array);
    List<String> list=new ArrayList<String>();
    list.addAll(Arrays.asList(array));
    int i=0;
    int j=1;
    for(i=0; i<array.length;i++){
    for(;j<array.length;j++){
    if(array[j].startsWith(array[i])){
    list.remove(array[j]);
    }else{
    i=j-1;
    j++;
    break;
    }
    }
    }
    System.out.println(list);
    }