首页 > 试题广场 >

橡皮泥斑马

[编程题]橡皮泥斑马
  • 热度指数:2547 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小易很喜欢斑马,因为它们身上黑白相间的花纹。
一天小易得到了一串橡皮泥,这串橡皮泥只有黑色和白色,小易想把这串橡皮泥重新拼凑一下,让这个橡皮泥串中最长的连续的黑白相间的子串最长,但是小易有强迫症,所以他可以对橡皮泥串进行以下的操作0次或多次:
把橡皮泥串从某个地方切割开,将两个得到的两个串同时翻转,再拼接在一起。
这个橡皮泥串可能太长了,所以小易没有办法计算最终可以得到的最长的连续的黑白相间的子串的长度,希望你能帮他计算出这个长度。

输入描述:
一个字符串s,只包含字母'b'和字母'w',分别表示黑色和白色的橡皮泥块。
满足1 <= |s| <= 105,|s|代表字符串的长度。


输出描述:
一个整数,表示改变之后最长的连续的黑白相间的子串的长度。
示例1

输入

bwbwb

输出

5
示例2

输入

wwb

输出

3
测试用例不太严谨,我用的错误的方法结果还通过了,我看题解才知道我错了
s = input()
t = s[0]
l_max = 0
l = 1
for i in range(1,len(s)):
    c = s[i]
    if c == t:
        if l_max < l:
            l_max = l
            l_max_0 = i - l + 1
        l = 1
    else:
        l += 1
    t = s[i]
if l_max == 0:
    l_max = l
    l_max_0 = 0
if l_max < l:
    l_max = l
    l_max_0 = i - l + 1
if s[0] != s[-1] and (l_max_0 == 0&nbs***bsp;l_max_0 == len(s) -l):
    l_max += 1
print(l_max)

发表于 2020-07-02 22:57:40 回复(0)
"""
将串首尾相连成环(简化为将S加上一个首字符),计算最长子串
能通过本题的所有测试用例
"""

if __name__ == "__main__":
    s = input().strip()
    s = s + s[0]
    ans, tmp = 0, 1
    for i in range(1, len(s)):
        if s[i] == s[i - 1]:
            ans = max(ans, tmp)
            tmp = 1
        else:
            tmp += 1
    ans = max(ans, tmp)
    print(ans)

编辑于 2019-08-24 16:27:40 回复(5)