分析:
在A中所有字符串都是由相同的字符组成的,但顺序不一样,如果两个字符串只有两个字符位置不同,那么我们把这两个字符串归为一组,求共有多少组。
注意:len(A)*len(A[i]) < 20000,保证了n^2*m或者m^2*n的复杂度是可行的
思路:
这是一道典型的union find题,是在prim算法还是在kruskal算法中这个思想被用到了。这里我介绍两种方法,一种是union find,一种是dfs
1 | class Solution(object): |
再介绍一种dfs方法,我们把每个字符串看做一个节点,如果两个字符串是同一个组则将它们相连接,最后构成一个图,在这个图中用dfs方法找有多少个连通分量
1 | class Solution(object): |
这道题还挺可惜的,这两种方法用python写都tle了,但是用java,c++都完全ok,就学下思路吧~