สตริงที่กำหนดอาจเป็นส่วนผสมของตัวเลขและตัวอักษร ในบทความนี้ เราจะต้องค้นหาสตริงย่อยที่ใหญ่ที่สุดที่มีตัวอักษรและตัวเลขรวมกัน
พร้อมรีโมดูล
โมดูลนิพจน์ทั่วไปสามารถใช้เพื่อค้นหาสตริงย่อยต่อเนื่องทั้งหมดที่มีตัวเลขหรือตัวอักษร จากนั้นเราใช้ฟังก์ชัน max เพื่อเลือกเฉพาะสตริงย่อยที่ต่อเนื่องกันของตัวอักษรและตัวเลข ซึ่งมีความยาวสูงสุดในบรรดาสตริงย่อยทั้งหมดที่พบ ฟังก์ชัน findall ยังใช้เพื่อระบุและรับสตริงย่อยที่จำเป็นอีกด้วย
ตัวอย่าง
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))
ผลลัพธ์
การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -
(' Congratulations! ', '459')
ด้วย len() และ While Loop
นี่เป็นวิธีการที่ตรงไปตรงมาแต่ช้า ซึ่งเราออกแบบในขณะที่วนซ้ำเพื่อตรวจสอบความยาวของตัวเลขและตัวอักษรที่แสดงเป็นสตริงย่อยในสตริงที่กำหนด จากนั้นเราจะเปรียบเทียบความยาวและเลือกเฉพาะสตริงย่อยที่มีความยาวสูงสุด
ตัวอย่าง
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))
ผลลัพธ์
การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -
('Congratulations', '459')