怎么进行如下的字符串数组排序?
给定字符串数组,要求进行判断是否存在以下序列
前一个字符串末尾字符等于后一个字符串首字符。
例如:
{"ab","de","bc","cd"} # 此字符串数组满足条件
{"ab","bc","cd","fg"} # 此字符串数组不满足条件
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
其实就是七桥问题,把一个字符串视作从首字母到尾字母的有向链接,求特定字符串集合能不能一次不重复走完。从图论的角度来看,由于可能存在不连通的子图,所以不能简单地用各个节点的度来判断,但节点的度可以用来快速排除不符合的集合。
所以很简单,如果集合中存在这样的序列,必然是以下情况之一:
循环。所有节点的出度等于入度;
不循环。除了某两个节点外,其他所有节点的出度等于入度。
如果符合上面的条件,那么还要跑一次 dfs 看能不能单路径遍历所有边。
如果要排序,那就是 dfs 出来的那条路径。
ted 大的算法非常完整,就算法的部份可以參考他的說法,以下是我用 Python 實現的一個範例(
algo.py
):首先是一個基礎的
dfs
function,不需要做任何事前確認就能夠正確地辨識出 string list 是否符合條件:但是有了事前檢查可以減少不必要的
dfs
。用來作提前檢查的
pre_check
:有作
pre_check
的 完整版check
:測試結果: