这是一个leetcode式的面试问题,我试了一段时间,但没走多远,现在再试一次。给定一个字符串,您可以在字符串中输入多少个字符,例如“b”,这样字符串中就不存在连续的3个“b”。在
示例:
给定:cat
字符串:bbcbbabbtbb
输出:8
给定babb
字符串:bbabb
输出:1
给定bb
字符串:bb
输出:0
我的方法是用滑动窗口跟踪当前指数前面的“b”,但是我很快就迷路了。我的解决方案可能还很遥远,但在这里:
def consecB(S):
num = 0
for i in range(0, len(S)-2):
if S[i] == 'b':
if S[i+1] == 'b':
pass
else:
num += 1
str_list += 'b'
num +=1
else:
if S[i+1] == 'b':
if S[i+2] == 'b':
pass
else:
num += 1
else:
num += 2
return num
非常感谢任何帮助。在
干杯
多亏了上面的答案,如果有人想知道的话,我可以想出一个解决方案:
^{pr2}$
事实证明,一个洞察力让这件事变得微不足道。首先,检查字符串中是否已经有三个连续的
b
s;如果是这样,那么最后一个字符串必须通过基本测试。在这样,最后的最大字符串将是
b
对作为分隔符和非b
字符的书尾。所以。。。在b
字符的数量;称为n
。最后的字符串是n
字符,加上2*(n+1)
缓冲b
sb
的数量是2*(n+1) - (len(s) - n)
,其中{我觉得这比你做的简单多了。在
一个没有
b
开头的字符串,可以在彼此的字符之间插入两个b
,加在开头和结尾。(就绳子的长度而言,有多少根?)在一个有一个
b
的字符串在用b
s“填充”时看起来是一样的,就像它没有b
一样。所以就好像我们从一个短了1个字符的字符串开始(原来的b
没有给我们额外的插入位置),而且我们可以少插入1个b
,因为已经存在的那个将取代它。因此,我们插入(练习:多少?)如果字符不是b
,那么b
要少。在这扩展到任何数量的孤立的
b
如果有一个双}。无论哪种方式我们都得到
b
,那么它将删除两个要插入的位置:比较插入acbbca
和插入{bbabbcbbcbbabb
;原理是一样的——我们从一个短2个字符的字符串开始,再少插入2个b
,因为它们已经在那里了。也就是说,原始的b
是孤立的还是折叠的并不重要;原始字符串中的每个b
都会减少相同数量的答案。在总之,一个简单的数学公式——根据字符串的长度和已经存在的
b
的数量——告诉我们答案。(当然,如果已经有一个三元组b
,那么我们根本就不能添加到字符串中,所以我们应该单独检查它的合理性)。在相关问题 更多 >
编程相关推荐