设计一个比较器来命令单词,使每个单词的最后一个字母是下一个单词的第一个字母?

Sam*_*nch 3 java puzzle algorithm words comparator

好的,所以我有一个程序,其中包含一个我需要的部分"命令单词,使列表中每个项目的最后一个字母是下一个项目的第一个字母,一种由最后一个和第一个链接在一起的单词链字母".

样品输入是狗,大象,长颈鹿,犀牛,老虎,正确的输出是狗,长颈鹿,大象,老虎,犀牛,而我的输出是老虎,犀牛,狗,长颈鹿,大象.

比较器是这样的:

class linkedSort implements Comparator {
    //will return 1 for a match
    //returns 0 if no match

    public int compare(Object t, Object t1) {
        char[] charArr1 = t.toString().toCharArray();
        char[] charArr2 = t1.toString().toCharArray();

        if (charArr1[charArr1.length - 1] == charArr2[0]) {
            return -1;
        } else {
            return 1;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很有帮助!!

tem*_*def 10

您无法通过简单的比较器和排序来解决这个问题,因为比较并未定义总排序.总订单是以下四个属性所包含的订单:

  • 反身性:x≤x始终为真.
  • 反对称:如果x≤y且x≠y,则y≤x永远不为真.
  • 传递性:如果x≤y且y≤z,则x≤z
  • 总体:对于任何x和y,x≤y和y≤x中的至少一个成立.

您的订单不是全部订单.首先,它打破了反身性:例如,"a"≤"a".其次,它打破了反对称性:"缓和"≤"前夕"和"前夕"≤"轻松".第三,它打破了传递性:"东"≤"茶"和"茶"≤"aver",但"东"≤"aver"是假的.最后,它不是完全的:"东"不小于"西","西"不小于"东".

要解决此问题,您需要采用不同的方法.作为提示,您可能希望将问题视为一个图形,其中字母是节点,而单词是连接起始字母和结束字母的边缘.你能在这张图中找到一条路径,它只访问每个边缘一次吗?

希望这可以帮助!