Một chuỗi đã cho có thể là hỗn hợp của các chữ số và chữ cái. Trong bài viết này, chúng tôi bắt buộc phải tìm chuỗi con lớn nhất có các chữ cái và chữ số cùng nhau.
với mô-đun lại
Mô-đun biểu thức chính quy có thể được sử dụng để tìm tất cả các chuỗi con liên tục có chữ số hoặc chữ cái. Sau đó, chúng tôi áp dụng hàm max để chỉ chọn những chuỗi con liên tục gồm các chữ cái và chữ số có độ dài tối đa trong số tất cả các chuỗi con được tìm thấy. Hàm findall cũng được sử dụng để xác định và lấy các chuỗi con cần thiết.
Ví dụ
import re def longSubstring(str): letter = max(re.findall(r'\D+', str), key=len) digit = max(re.findall(r'\d+', str), key=len) return letter, digit str = 'Hello 459 Congratulations! 234' print(longSubstring(str))
Đầu ra
Chạy đoạn mã trên cho chúng ta kết quả sau -
(' Congratulations! ', '459')
Với len () và Vòng lặp Trong khi
Đây là một cách tiếp cận thẳng nhưng chậm, trong đó chúng tôi thiết kế các vòng lặp while để kiểm tra độ dài của các chữ số và chữ cái có mặt dưới dạng chuỗi con trong chuỗi đã cho. Sau đó, chúng tôi so sánh độ dài của chúng và chỉ chọn các chuỗi con có độ dài tối đa.
Ví dụ
def longSubstring(s): max_letterSeq = '' max_digitSeq = '' i = 0 while (i < len(s)): current_letterSeq = '' current_digitSeq = '' # Letters while (i < len(s) and s[i].isalpha()): current_letterSeq += s[i] i += 1 # Digits while (i < len(s) and s[i].isdigit()): current_digitSeq += s[i] i += 1 # Check if not digit or alphabet 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 str = 'Hello 459 Congratulations! 234' print(longSubstring(str))
Đầu ra
Chạy đoạn mã trên cho chúng ta kết quả sau -
('Congratulations', '459')