擅长:python、mysql、java
<p>如果我正确地理解了您的问题,您可以使用正则表达式执行此操作:</p>
<pre><code>import re
re.sub(r'(.)\1+', r'\1', 'aardvarrk')
</code></pre>
<p>这会将所有相同字符的序列压缩为一个,从而得到<code>'ardvark'</code>。在</p>
<p>至于拼写检查器的实现,我建议“折叠”字典中所有按顺序具有重复字符的单词,并将其保存在字典(数据结构)中,其中键是折叠的单词,值是原始单词(或者可能是原始单词的<code>set</code>):</p>
^{pr2}$
<p>现在,当你分析你的输入时,对于每个单词:</p>
<ol>
<li><p>检查它是否存在于你的正确单词列表中。如果有,就忽略它。(例如:输入是<code>'person'</code>。它在单词列表中。这里没什么可做的)。</p></li>
<li><p>如果没有,就“折叠”它,看看:</p>
<ol>
<li>它存在于你的单词表中。如果有,请更换。(例如:<code>'computerr'</code>变成{<cd5>}。现在只需将其替换为列表中的原始单词)。在</li>
<li>你的字典里有一个键。如果是,则用与该键关联的单词替换它。(例如:<code>'aaapppleee'</code>变成{<cd7>}。现在您可以在单词列表中查找<code>'aple'</code>。它不在那里。现在在字典中查找键<code>'aple'</code>。如果它在那里。将其替换为其值<code>'apple'</code>。)</li>
</ol></li>
</ol>
<p>我看到这种方法的唯一问题是两个有效的单词可能“塌陷”成同一个“单词”,这意味着您必须使用<code>set</code>作为值。在</p>
<p>假设<code>'hallo'</code>和{<cd13>}都是有效单词,用户输入{<cd14>}。现在你得决定用哪一个来代替。这可以通过计算输入和可能的替换之间的<a href="http://en.wikipedia.org/wiki/Levenshtein_distance" rel="nofollow">Levenshtein distance</a>来完成。在</p>