Cho chuỗi 섞 chữ cái và chữ số, tìm chuỗi con liên tiếp chỉ chứa chữ cái dài nhất và chỉ chứa chữ số dài nhất.
Cách 1: Module re (Regular Expression)
Dùng re.findall(r'\D+', str) tìm các chuỗi chữ, re.findall(r'\d+', str) tìm chuỗi số, lấy max theo độ dài.
import re
def longSubstring(s):
letter = max(re.findall(r'\D+', s), key=len)
digit = max(re.findall(r'\d+', s), key=len)
return letter, digit
s = 'Hello 459 Congratulations! 234'
print(longSubstring(s)) # (' Congratulations! ', '459')
Cách 2: Vòng lặp while + len()
Duyệt chuỗi, tích lũy chuỗi chữ và chuỗi số liên tiếp, cập nhật max.
def longSubstring(s):
max_letterSeq = ''
max_digitSeq = ''
i = 0
while i < len(s):
current_letterSeq = ''
current_digitSeq = ''
while i < len(s) and s[i].isalpha():
current_letterSeq += s[i]
i += 1
while i < len(s) and s[i].isdigit():
current_digitSeq += s[i]
i += 1
if i < len(s) and not s[i].isdigit() and not s[i].isalpha():
i += 1
if len(current_letterSeq) > len(max_letterSeq):
max_letterSeq = current_letterSeq
if len(current_digitSeq) > len(max_digitSeq):
max_digitSeq = current_digitSeq
return max_letterSeq, max_digitSeq
s = 'Hello 459 Congratulations! 234'
print(longSubstring(s)) # ('Congratulations', '459')