สมมติว่าเรามีสตริง s ที่มีอักขระที่เป็นไปได้สี่ตัว "1", "2", "3" และ "?" เราสามารถใส่ "1", "2" และ "3" อันใดอันหนึ่งแทน "?" เราต้องหาจำนวนที่น้อยที่สุดที่เราสามารถทำได้เพื่อไม่ให้มีเลขสองตัวติดกันเหมือนกัน
ดังนั้น หากอินพุตเป็น s ="2??3?" ผลลัพธ์จะเป็น 21231
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ผม :=0
- s :=รายการองค์ประกอบจาก s
- ถ้าขนาด s <2 แล้ว
- ถ้า s[i] เหมือนกับ "?" แล้ว
- ส่งคืน "1"
- ถ้า s[i] เหมือนกับ "?" แล้ว
- ในขณะที่ฉัน <ขนาดของ s ทำ
- ถ้า s[i] เหมือนกับ "?" แล้ว
- ถ้าฉันเหมือนกับ 0 แล้ว
- s[i] :="1" เมื่อ s[i + 1] ไม่ใช่ "1" มิฉะนั้น "2"
- มิฉะนั้น เมื่อ i> 0 และ i <=ขนาด s - 2 แล้ว
- ถ้า s[i - 1] เหมือนกับ "1" แล้ว
- ถ้า s[i + 1] เหมือนกับ "2" แล้ว
- s[i] :="3"
- มิฉะนั้น
- s[i] :="2"
- ถ้า s[i + 1] เหมือนกับ "2" แล้ว
- มิฉะนั้น เมื่อ s[i - 1] เหมือนกับ "2" แล้ว
- ถ้า s[i + 1] เหมือนกับ "2" แล้ว
- s[i] :="3"
- มิฉะนั้น
- s[i] :="1"
- ถ้า s[i + 1] เหมือนกับ "2" แล้ว
- มิฉะนั้น เมื่อ s[i - 1] เหมือนกับ "3" แล้ว
- ถ้า s[i + 1] เหมือนกับ "2" แล้ว
- s[i] :="2"
- มิฉะนั้น
- s[i] :="1"
- ถ้า s[i + 1] เหมือนกับ "2" แล้ว
- ถ้า s[i - 1] เหมือนกับ "1" แล้ว
- มิฉะนั้น
- s[i] :="1" เมื่อ s[i - 1] ไม่ใช่ "1" มิฉะนั้น "2"
- ถ้าฉันเหมือนกับ 0 แล้ว
- ผม :=ผม + 1
- ถ้า s[i] เหมือนกับ "?" แล้ว
- รวมรายการของ s เป็นสตริงแล้วส่งคืน
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(s): i = 0 s = list(s) if len(s) < 2: if s[i] == "?": return "1" while i < len(s): if s[i] == "?": if i == 0: s[i] = "1" if s[i + 1] != "1" else "2" elif i > 0 and i <= len(s) - 2: if s[i - 1] == "1": if s[i + 1] == "2": s[i] = "3" else: s[i] = "2" elif s[i - 1] == "2": if s[i + 1] == "1": s[i] = "3" else: s[i] = "1" elif s[i - 1] == "3": if s[i + 1] == "1": s[i] = "2" else: s[i] = "1" else: s[i] = "1" if s[i - 1] != "1" else "2" i += 1 return "".join(s) s = "2??3?" print(solve(s))
อินพุต
"2??3?"
ผลลัพธ์
21231