<p>如果使用线性时间算法而不是二次时间算法,则1e5和6e5不是大数:</p>
<pre><code>#!/usr/bin/env python
with open('letters') as file:
letters = file.read().splitlines()
def combine_ids(letters):
with open('numbers') as file:
for line in file:
id, space, numbers_str = line.lstrip().partition(' ')
try:
numbers = list(map(int, numbers_str.split(',')))
except ValueError:
continue # skip invalid lines
for n in numbers:
try:
yield letters[n], id
except IndexError:
pass
result = dict(combine_ids(letters))
print(result)
</code></pre>
<p>如果多个id可能对应于同一个字母(如果<code>numbers</code>文件中有重复的数字),那么最新的数字获胜。你知道吗</p>
<h3>示例</h3>
<p>数字:</p>
<pre><code>id1 5, 33
id2 23
id3 103, 2, 3
</code></pre>
<p>信件:</p>
<pre><code>AAAA
AAAB
AAAC
AAAD
AAAE
AAAF
AAAG
AAAH
AAAI
AAAJ
AAAK
...
AAAX
AAAY
AAAZ
</code></pre>
<h3>输出</h3>
<pre><code>{'AAAX': 'id2', 'AAAC': 'id3', 'AAAD': 'id3', 'AAAF': 'id1'}
</code></pre>
<p>注意:数字<code>2</code>对应于<code>AAAC</code>(零基索引),如果字母应该从<code>1</code>索引,则使用<code>letters[n-1]</code>(假设<code>n>=1</code>)。你知道吗</p>