private void computeScore() {
        Map<Integer, Integer> scoretable = new TreeMap<>();

        // find all the unique values

        Map<String, Integer> count = new HashMap<>();

        for (Integer player : this.table.keySet()) {
            for (String v : this.table.get(player)) {
                if (!count.containsKey(v)) {
                    count.put(v, 1);
                } else {
                    assert count.get(v) != null;
                    count.put(v, count.get(v) + 1);
                }
            }
        }

        for (Integer player : this.table.keySet()) {

            Set<String> wordslisted = this.table.get(player);

            if (wordslisted.size() == 0) {
                scoretable.put(player, 0);
                continue;
            }

            int score = 0;

            for (String v : wordslisted) {
                if (count.get(v) == 1 && isValidMove(v))
                    score += v.length();

                scoretable.put(player, score);
            }
        }

        System.out.println("Final Scores !");

        for (Integer player : scoretable.keySet()) {
            System.out.println("Player id = " + player + " : score = " + scoretable.get(player));
        }
    }