สมมติว่าเรามีสตริงตัวพิมพ์เล็ก 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)
- ถ้า c เหมือนกับ "?" แล้ว
- คืนแม็กซ์เลน
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
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