擅长:python、mysql、java
<p>让我们看看如何手动完成这项工作,只使用新手能够理解的工具。实际上学习<code>zip</code>和迭代器和理解等等都是比较好的,但也可能有助于了解你写同样东西的笨拙和冗长。在</p>
<p>那么,让我们从单个字符和个位数开始:</p>
<pre><code>def expand(s):
result = ''
repeated_char_next = True
for char in s:
if repeated_char_next:
char_to_repeat = char
repeated_char_next = False
else:
repeat_count = int(char)
s += char_to_repeat * repeat_count
repeated_char_next = True
return char
</code></pre>
<p>这是一个非常简单的状态机。有两种状态:要么下一个字符是要重复的字符,要么是一个给出重复计数的数字。在阅读了前者之后,我们还没有什么要补充的(我们知道这个角色,但不知道要重复多少次),所以我们只需要切换状态。在阅读了后者之后,我们现在知道要添加什么(因为我们既知道字符又知道重复计数),所以我们这样做了,还切换了状态。就这些了。在</p>
<hr/>
<p>现在,要将其扩展到多字符重复字符串和多位数重复计数:</p>
^{pr2}$
<p>这里的状态很相似,我们要么在读非数字,要么在读数字。但是我们不会在每个字符后自动切换状态;我们只在非数字后面得到一个数字时才这样做,反之亦然。另外,我们必须跟踪当前重复字符串和当前重复计数中的所有字符。我已经将州国旗压缩到重复字符串中,但这里没有其他需要技巧的地方。在</p>