Description
You are given a digit string s
that consists of digits from 0 to 9.
A string is called semi-repetitive if there is at most one adjacent pair of the same digit. For example, "0010"
, "002020"
, "0123"
, "2002"
, and "54944"
are semi-repetitive while the following are not: "00101022"
(adjacent same digit pairs are 00 and 22), and "1101234883"
(adjacent same digit pairs are 11 and 88).
Return the length of the longest semi-repetitive substring of s
.
Example 1:
Input: s = "52233"
Output: 4
Explanation:
The longest semi-repetitive substring is "5223". Picking the whole string "52233" has two adjacent same digit pairs 22 and 33, but at most one is allowed.
Example 2:
Input: s = "5494"
Output: 4
Explanation:
s
is a semi-repetitive string.
Example 3:
Input: s = "1111111"
Output: 2
Explanation:
The longest semi-repetitive substring is "11". Picking the substring "111" has two adjacent same digit pairs, but at most one is allowed.
Constraints:
1 <= s.length <= 50
'0' <= s[i] <= '9'
Solution
Python3
class Solution:
def longestSemiRepetitiveSubstring(self, s: str) -> int:
N = len(s)
res = i = 0
pairs = 0
for j, x in enumerate(s):
if j > 0 and x == s[j - 1]:
pairs += 1
while pairs > 1:
if i + 1 < N and s[i] == s[i + 1]:
pairs -= 1
i += 1
res = max(res, j - i + 1)
return res