Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ค้นหาตัวอักษรและสตริงย่อยที่ยาวที่สุดใน Python


สตริงที่กำหนดอาจเป็นส่วนผสมของตัวเลขและตัวอักษร ในบทความนี้ เราจะต้องค้นหาสตริงย่อยที่ใหญ่ที่สุดที่มีตัวอักษรและตัวเลขรวมกัน

พร้อมรีโมดูล

โมดูลนิพจน์ทั่วไปสามารถใช้เพื่อค้นหาสตริงย่อยต่อเนื่องทั้งหมดที่มีตัวเลขหรือตัวอักษร จากนั้นเราใช้ฟังก์ชัน 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')