擅长:python、mysql、java
<p>我自己解决了一部分问题。
已解决生成器代码中的for-if反模式:</p>
<pre><code>def generate(database, length,letters,curstring="",curdata=set()):
if len(curstring.replace(" ",""))>length:
return set()
if len((curstring).replace(" ",""))==length:
return curdata.union(set([curstring]))
t=countletters(curstring)
for i in ascii_lowercase:
if t[i]>letters[i]:
return set()
for i in database:
t=countletters(curstring+i)
test=0
for j in ascii_lowercase:
if t[j]>letters[j]:
test=1
if test: continue
if sum(t.values())<=length:
curdata=curdata.union(generate(database.difference(set([i])),length,letters,curstring+" "+i,curdata))
database=database.difference(set([i]))
return curdata
</code></pre>
<p>它现在快得多,但是如果字典包含数万个单词和/或输入字符串很长,则仍然很慢。在</p>