Skip to content

Commit 7376f61

Browse files
authored
Update Readme.md
1 parent c578f8b commit 7376f61

File tree

1 file changed

+5
-4
lines changed
  • String/411.Minimum-Unique-Word-Abbreviation

1 file changed

+5
-4
lines changed

String/411.Minimum-Unique-Word-Abbreviation/Readme.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22

33
此题不需要遍历所有的字典里的单词的缩写形式.
44

5-
首先,我们应该注意到,如果字典里的单词和target的长度不一致,那么永远不会有冲突.所以一下子将范围缩小到那些与target等长的单词了.
5+
首先,我们应该注意到,缩写不会改变长度,所以两个长度不同的单词,他们的任何形式的缩写都不可能相同。所以对于字典里的那些与target的长度不一致的单词,完全可以忽略。
66

7-
其次,缩写的方案怎么确定呢?其实就是任意一个字符可以选择取或不取.所以就是2^N次方,用一个N位的二进制数(作为mask)就可以表示了.有0的bit表示改成数字,有1的bit表示保留字母.这样一个mask就表示一种缩写方案.
7+
其次,targe的缩写方案有多少呢?不难判断,每一个字符只有两种选择:被缩写或者不被缩写。所以target的缩写形式只有2^m种可能。考虑到m是21,最多有2e6种缩写,是可以遍历过来的。对于无需剪枝的无脑遍历,使用bitmask来穷举所有缩写方式是最方便的,这与```LC 320.Generalized-Abbreviation```是一样的做法。当然,我们肯定先尝试长度短的缩写方法,再尝试长的缩写方法。所以需要将所有的缩写方法按照长度排序。
88

9-
因此,我们不需要用DFS显式地穷尽字典或target的所有缩写字符串,只要逐个查验缩写方案即可.我们将所有mask按照题目中定义的长度按从小到大排序.每尝试一个mask,就查看依照这种缩写方案得到的target,是否与字典里的单词依靠同样一种缩写方案得到的字符串相同.如果没有冲突的,那么我们就可以立马选用这种缩写方案.
9+
最后,我们对于target的每一种缩写方式abbr,都要与字典里的每一个单词word进行匹配,看是否abbr是否也是word的一个缩写。这个算法和```LC 408.Valid-Word-Abbreviation```是一样的。
1010

11+
所以总的时间复杂度是```o(2^m*n)```. 因为题目给出了m+log(n)<=21,所以```2^m*n<=2^21```,即时间复杂度是2e6级别,是可行的。
1112

12-
[Leetcode Link](https://leetcode.com/problems/minimum-unique-word-abbreviation)
13+
[Leetcode Link](https://leetcode.com/problems/minimum-unique-word-abbreviation)

0 commit comments

Comments
 (0)