📅  最后修改于: 2023-12-03 14:58:30.799000             🧑  作者: Mango
本题要求我们实现一个 最长连续数字子串 的函数。在这里,最长连续数字子串是指,一个字符串中由数字字符组成,且数字字符在字符串上是连续的、且长度最长的子串。
一个直观的想法是使用两个指针 $p_1, p_2$ 标记子串的起始和终止,然后分三种情况讨论:
具体的实现细节可以参见代码实现。
def longest_continuous_digit_substring(s: str) -> str:
p1, p2 = 0, 0
longest_substring = ''
while p2 < len(s):
if s[p2].isdigit():
p2 += 1
else:
if p2 - p1 > len(longest_substring):
longest_substring = s[p1:p2]
p1 = p2 = p2 + 1
if p2 - p1 > len(longest_substring):
longest_substring = s[p1:p2]
return longest_substring
我们可以使用一些测试用例来检验实现的正确性。例如:
assert longest_continuous_digit_substring('abc123defg456hij') == '456'
assert longest_continuous_digit_substring('a1b2c3d4e5f6g7h8i9j') == '123456789'
assert longest_continuous_digit_substring('123') == '123'
assert longest_continuous_digit_substring('') == ''
assert longest_continuous_digit_substring('abc') == ''
assert longest_continuous_digit_substring('0123456789') == '0123456789'
整个算法只对字符串遍历了一次,因此时间复杂度为 $\Theta(n)$。
由于只存储了一个字符串和三个整数变量,因此空间复杂度为 $\Theta(1)$。