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

โปรแกรมค้นหาความยาวของสตริงย่อยที่ยาวที่สุดต่อเนื่องกันใน Python


สมมติว่าเรามีสตริงตัวพิมพ์เล็ก s ประกอบด้วยตัวอักษรภาษาอังกฤษและ "?" สัญลักษณ์. แต่ละ "?" เราต้องลบออกหรือแทนที่ด้วยตัวพิมพ์เล็ก เราต้องหาความยาวของสตริงย่อยที่เพิ่มขึ้นต่อเนื่องกันที่ยาวที่สุดที่ขึ้นต้นด้วยตัวอักษร "a"

ดังนั้น หากอินพุตเป็นเหมือน s ="vta???defke" ผลลัพธ์จะเป็น 6 เนื่องจากเราสามารถเปลี่ยน s เป็น "vtabcdefke" และ "abcdef" เป็นสตริงย่อยที่เพิ่มขึ้นต่อเนื่องกันยาวนานที่สุด และสิ่งนี้ก็เริ่มต้นด้วย "ก".

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • แมกซ์เลน :=0
  • ความยาว :=0
  • qmarks :=0
  • สำหรับแต่ละ c ใน s ทำ
    • ถ้า c เหมือนกับ "?" แล้ว
      • qmarks :=qmarks + 1
    • มิฉะนั้น
      • idx :=(ASCII ของ c) - (ASCII ของ "a")
      • ความยาว :=idx + 1 ถ้าความยาว <=idx <=ความยาว + qmarks หรือ idx <=qmarks มิฉะนั้น 0
      • qmarks :=0
    • maxlen :=สูงสุดของ maxlen และ (ความยาวขั้นต่ำ + qmarks และ 26)
  • คืนแม็กซ์เลน

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

def solve(s):
   maxlen = length = qmarks = 0
   for c in s:
      if c == "?":
         qmarks += 1
      else:
         idx = ord(c) - ord("a")
         length = idx + 1 if length <= idx <= length + qmarks or idx <= qmarks else 0
         qmarks = 0
      maxlen = max(maxlen, min(length + qmarks, 26))
   return maxlen

s = "vta???defke"
print(solve(s))

อินพุต

"vta???defke"

ผลลัพธ์

6