Skip to content

Commit

Permalink
Update Readme.md
Browse files Browse the repository at this point in the history
  • Loading branch information
wisdompeak authored Feb 3, 2022
1 parent 937d462 commit 126751c
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions Union_Find/2157.Groups-of-Strings/Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@

但是本题有还有更好的```o(N*26)```的算法。事实上,本题中三个条件,其中第一个条件和第二个条件显然是等价的。我们依然可以用上述的方法,循环26次将每个单词的编码A扣掉一个1 bit得到B,将i与家族B的代表进行Union即可。

而第三个条件,本质也是如此。假设任意单词word[i]的编码A任意去掉一个字母,等于单词word[j]的编码B任意去掉一个字母,那么根据题意,i和j必须Union。那么这就意味着,我们将编码A的家族与它任意去掉一个字母后的编码A'家族进行Union,其他单词也做类似的操作,就可以将满足条件三的任意一对单词必然会被Union起来。
而第三个条件,本质也是如此。假设任意单词word[i]的编码A任意去掉一个字母,等于单词word[j]的编码C任意去掉一个字母,那么根据题意,i和j必须Union。那么这就意味着,我们将编码A的家族与它任意去掉一个字母后的编码B家族进行Union,其他单词也做类似的操作,就可以将满足条件三的任意一对单词必然会被Union起来。

所以本题的算法如下:
1. 将每个单词i翻译成编码A,将i与编码A的家族进行Union。
2. 将每个单词i的编码A,任意去掉一个字母变成编码A',将编码A的家族与A'的家族进行Union
2. 将每个单词i的编码A,任意去掉一个字母变成编码B,将编码A的家族与B家族进行Union

满足以上操作之后,所有需要Union的单词一定已经做了归并。我们根据每个家族的族长进行分组统计,得到家族的数量和最大的家族。

0 comments on commit 126751c

Please sign in to comment.