擅长:python、mysql、java
<p>正如其他人所说,词典理解并不是天生的低效。如果你想加快你的解决方案,你应该看看你的算法。你知道吗</p>
<p><code>s1dict = {x: s1.count(x) for x in s1}</code>是获取<code>s1</code>中所有字符计数的低效方法。如果<code>s1</code>是长度N,那么它将在<code>s1</code>中迭代N次,使其成为O(N^2)。如果你要自己实现这个逻辑,它会像这样:</p>
<pre><code>s1dict = {}
for char1 in s1:
for char2 in s1:
if char2 == char1:
s1dict[char1] = s1dict.get(char1, 0) + 1
</code></pre>
<p>有一种方法可以在O(N)时间内得到计数。你知道吗</p>
<pre><code>s1dict = {}
for char in s1:
s1dict[char] = s1dict.get(char, 0) + 1
</code></pre>
<p>或者,您可以使用<code>collections.Counter</code>为您执行此操作:<code>s1dict = collections.Counter(s1)</code>。你知道吗</p>
<p>你计算s3dict的方法实际上是无效的。我也不认为字典理解是比较这两本字典的最好方法。您可以使用字典理解(<code>all({k: s1dict.get(k, 0) >= v for k, v in s2dict.items()})</code>),但为什么不编写一个简单的循环呢?你知道吗</p>
<pre><code>for key, value in s2dict.items():
if s1dict.get(key, 0) < value:
return False
return True
</code></pre>