279最长连续交替01子串问题

题解

要解决这个问题,我们需要找到通过将二进制字符串分割并翻转各部分后,能够得到的最长连续交替01子串的长度。关键在于识别字符串中相邻相同字符的位置,然后尝试翻转这些部分以最大化交替子串的长度。

解题思路

  • 字符串翻转后并不会影响最长的01串的长度
  • 题目的操作会使得字符串的头和尾拼接。如果头和尾的字符是相同的,那么最长的01一定在原本的字符串中。
  • 如果头和尾的字符是不同的,那么最长的01串可能两个部分拼接而成。这两个部分分别是原字符串的前缀和后缀,因此我们只需要找到前缀和后缀中第一个相邻相同字符的位置,然后尝试翻转这两个部分,找到最长的01串即可。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 求最长的01子串
def get(s):
mx = cur = 1
for i in range(1, len(s)):
if s[i] != s[i-1]:
cur += 1
mx = max(mx, cur)
else:
cur = 1
return mx

def solution(s: str) -> int:
res = get(s)
if s[0] == s[-1]:
return res
for i in range(1, len(s)):
if s[i] == s[i-1]:
res = max(res, get(s[:i][::-1] + s[i:][::-1]))
break
for i in range(len(s) - 2, -1, -1):
if s[i] == s[i+1]:
res = max(res, get(s[:i][::-1] + s[i:][::-1]))
break

return res


279最长连续交替01子串问题
https://kongshuilinhua.github.io/2024/12/30/279最长连续交替01子串问题/
作者
FireFLy
发布于
2024年12月30日
许可协议