擅长:python、mysql、java
<p>你的代码甚至没有返回正确的值。这一行是O(n logn):</p>
<pre><code>return sorted(word1) == sorted(word2)
</code></pre>
<p>对于O(n)解决方案,可以对所有字符进行计数:</p>
^{pr2}$
<p>如果没有收藏,它会更长:</p>
<pre><code>def check(a, b):
chars = dict.fromkeys(a + b, 0)
for c in a:
chars[c] += 1
for c in b:
chars[c] -= 1
return not any(chars.values())
</code></pre>
<p>此代码执行以下操作:</p>
<ul>
<li><code>chars = dict.fromkeys(a + b, 0)</code>:创建一个dict,它将两个单词中出现的所有字符都设置为0。在</li>
<li><code>for c in a: chars[c] += 1</code>:这将迭代<code>a</code>并计算其中每个字符的出现次数。<code>chars</code>现在包含独立字符的计数(对于b而不是a中的字符,还有一些零)</li>
<li><code>for c in b: chars[c] -= 1</code>:与之前一样,但是这将从<code>chars</code>中减去{<cd6>}的字符数</li>
<li><code>return not any(chars.values())</code>:<code>chars['h'] == 0</code>当且仅当<code>a</code>和{<cd6>}具有相同数量的<code>'h'</code>。这行检查<code>chars</code>是否只有零作为值,这意味着所有字符在两个输入中都有相同的计数。(as<code>any</code>返回序列中是否有任何真实值。0是假的,其他整数都是真的。)</li>
</ul>
<p>两个列表都被迭代一次。假设字典的访问时间为O(1),则整个算法在O(n)时间内运行(其中n是输入的总长度)。空间复杂度也是O(n)(所有字符都可以是不同的)。当他们问你复杂性时,不要犯这个错误。这不是必要的时间复杂性。在</p>