查找字典中字符的优先级

时间:2015-10-09 07:44:02

标签: java algorithm dictionary data-structures topological-sort

**给定字符串字典[字符串按排序顺序]你必须根据字典找到字符的优先级。

  


  BXY

根据字典排名高于b!**

我尝试用拓扑排序解决这个问题,并编写了以下代码,它给了我一个e-b-x-y-a-t的输出。我无法确定我的解决方案,有什么建议吗? (谷歌采访中提到了这个问题)

  public static ArrayList<Vertex> topologicalSort (List<Vertex> graph){

    if (graph == null || graph.isEmpty()){
        throw new IllegalArgumentException();
    }

    ArrayList<Vertex> result = new ArrayList<>(); 

    for (Vertex v : graph){
        if (!v.isVisited){
            dfs(v,result);
        }
    }
    return result;      
}

public static void dfs (Vertex v, ArrayList<Vertex> result){

    v.isVisited = true;

    for (Vertex adjVertex : v.AdjList){
        if (!adjVertex.isVisited){
            dfs(adjVertex, result);
        }
    }
    result.add(v);      
}

     public static void main(String[] args) {
      List<Vertex> graph = new ArrayList<>();

        Vertex p1 = new Vertex("e");
        Vertex p2 = new Vertex("a");
        Vertex p3 = new Vertex("t");
        Vertex p4 = new Vertex("b");
        Vertex p5 = new Vertex("x");
        Vertex p6 = new Vertex("y");

        p1.AdjList = Arrays.asList(new Vertex[]{p2, p4});
        p2.AdjList = Arrays.asList(new Vertex[]{p3});
        p3.AdjList = Arrays.asList(new Vertex[]{});
        p4.AdjList = Arrays.asList(new Vertex[]{p5});
        p5.AdjList = Arrays.asList(new Vertex[]{p6});
        p6.AdjList = Arrays.asList(new Vertex[]{});

        graph.add(p1);
        graph.add(p2);
        graph.add(p3);
        graph.add(p4);
        graph.add(p5);
        graph.add(p6);

        ArrayList<Vertex> compileOrder = topologicalSort(graph);

        for( Vertex vertex : compileOrder){
        System.out.println(vertex.data );

        }           
    }
}   

1 个答案:

答案 0 :(得分:2)

是。如果你给Top-Sort作为答案,那就是对的。在给定的示例中,您只有2个单词。因此,您可以确定的一件事是字典中的e is before b。你无法确定其他角色。在该示例中,您有6个字符。

实际上,这6个字符的每个排列都是有效的输出,唯一的约束是e放在b之前。所以,这个例子有!6/2或360正确的解决方案。

对于更大的数据集,您的顶级排序会起作用,我认为这是一个有效的解决方案。

比如说,你有4个字符串:

tak, eat, byx, bxy

然后,你唯一的关系是:

t>e, e>b, y>x

在t之前具有t的{t,a,k,e,b,x,y}的所有排列都是x之前的b和y之前的e,e将是有效解。并且topsort会给出其中一个。