擅长:python、mysql、java
<p>此任务不需要<code>Count</code>或{<cd2>}。下面是一个优化的方法(对于长度为<code>n</code>的字符串,复杂性为O(n)):</p>
<pre><code>In [35]: def first_repeated(s):
seen = set()
for i, j in enumerate(s):
if j in seen: # membership check in set is O(1)
return j, s.count(j, i + 1) + 2
seen.add(j)
....:
In [36]: first_repeated(s)
Out[36]: ('u', 2)
</code></pre>
<p>下面是一个带有其他答案的基准测试,它显示此方法几乎快4-5倍:</p>
^{pr2}$
<p>此外,如果您想对大量数据执行此任务,则可以使用<a href="https://en.wikipedia.org/wiki/Suffix_tree" rel="nofollow noreferrer"><em>suffix tree</em></a>更快地完成此任务。下面是我自己在github中对该算法的优化实现。如果您不熟悉这种数据结构和算法<a href="https://github.com/kasramvd/SuffixTree" rel="nofollow noreferrer">https://github.com/kasramvd/SuffixTree</a>,也可以使用文档和有用的链接</p>
<p>作为在生成器表达式中使用<code>str.counter</code>的另一个基于线性的答案,您可以使用@Stefan Pochmann建议的以下方法:</p>
<pre><code>next((c, s.count(c)) for c in s if s.count(c) > 1)
</code></pre>