সমস্যা বিবরণ
একটি স্ট্রিং আক্ষরিক এবং সংখ্যা মিশ্রিত হতে পারে। স্ট্রিং থেকে সবচেয়ে লম্বা একসাথে আক্ষরিক সাবস্ট্রিং এবং সবচেয়ে লম্বা একসাথে সংখ্যাসূচক সাবস্ট্রিং বের করতে হবে।
পদ্ধতি ১: re মডিউল ব্যবহার
re.findall(r'\D+', str) দিয়ে সব নন-ডিজিট সাবস্ট্রিং, re.findall(r'\d+', str) দিয়ে সব ডিজিট সাবস্ট্রিং বের করুন। তারপর max(..., key=len) দিয়ে সবচেয়ে লম্বা দুটি বের করুন।
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
str_val = 'Hello 459 Congratulations! 234'
print(longSubstring(str_val)) # (' Congratulations! ', '459')
পদ্ধতি ২: len() এবং while লুপ ব্যবহার
ম্যানুয়ালি লুপ চালিয়ে আক্ষরিক ও সংখ্যা সিকোয়েন্স ট্র্যাক করুন এবং সর্বোচ্চ দৈর্ঘ্যের সাবস্ট্রিং বের করুন।
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
# Skip non-alphanumeric
if i < len(s) and not (s[i].isdigit() or 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_val = 'Hello 459 Congratulations! 234'
print(longSubstring(str_val)) # ('Congratulations', '459')