สมมติว่าเรามีสตริงตัวพิมพ์เล็กที่มีเฉพาะตัวอักษรและ '?' ตัวอักษรเราต้องแปลงทั้งหมด '?' อักขระเป็นตัวพิมพ์เล็กเพื่อให้สตริงสุดท้ายไม่มีอักขระซ้ำต่อเนื่องกัน หากมีวิธีแก้ไขมากกว่าหนึ่งวิธี ให้ส่งคืนวิธีใดวิธีหนึ่ง
ดังนั้น หากอินพุตเป็น s ="hel??" ผลลัพธ์จะเป็น helab เครื่องหมายคำถามแรกอาจเป็นอะไรก็ได้ยกเว้น 'l' และเมื่อให้อันแรก อันที่สองจะเป็นอะไรก็ได้ยกเว้น 'a' .
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ถ้าขนาดเท่ากับ 1 แล้ว
-
ถ้า s เหมือนกับ "?" แล้ว
-
ส่งคืน "a"
-
-
ผลตอบแทน s
-
-
s :=รายการอักขระที่มีอยู่ใน s
-
สำหรับฉันในช่วง 0 ถึงขนาด s - 1 ทำ
-
ถ้า s[i] เหมือนกับ "?" แล้ว
-
ถ้าฉันเหมือนกับ 0 และ s[i+1] เหมือนกับ "?" ดังนั้น
-
s[i] :="a"
-
-
มิฉะนั้น เมื่อ i เท่ากับ 0 และ s[i+1] จะเหมือนกับ "a" ดังนั้น
-
s[i] :="b"
-
-
มิฉะนั้นเมื่อฉันเหมือนกับ 0 แล้ว
-
s[i] :="a"
-
-
มิฉะนั้น เมื่อ i เท่ากับ (ขนาด s)-1 และ s[i-1] เท่ากับ "a" ดังนั้น
-
s[i] :="b"
-
-
มิฉะนั้นเมื่อ i เท่ากับ (ขนาด s)-1 แล้ว
-
s[i] :="a"
-
-
มิฉะนั้น เมื่อ s[i-1] เหมือนกับ "a" และ s[i+1] เหมือนกับ "?" ดังนั้น
-
s[i] :="b"
-
-
มิฉะนั้นเมื่อ s[i+1] เหมือนกับ "?" แล้ว
-
s[i] :="a"
-
-
มิฉะนั้น เมื่อ (s[i-1] เหมือนกับ "a" และ s[i+1] เหมือนกับ "b") หรือ (s[i-1] เหมือนกับ "b" และ s[i+1] เหมือนกับ "a") แล้ว
-
s[i] :="c"
-
-
ไม่เช่นนั้นเมื่อ s[i-1] หรือ s[i+1] คือ "a" ดังนั้น
-
s[i] :="b"
-
-
มิฉะนั้น
-
s[i] :="a"
-
-
-
-
คืนค่า s หลังจากรวมอักขระเป็นสตริง
ตัวอย่าง (Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(s): if len(s) == 1 : if s == "?": return "a" return s s = list(s) for i in range(len(s)): if s[i] == "?": if i == 0 and s[i+1] == "?": s[i] = "a" elif i == 0 and s[i+1] == "a": s[i] = "b" elif i == 0: s[i] = "a" elif i == len(s)-1 and s[i-1] == "a": s[i] = "b" elif i == len(s)-1: s[i] = "a" elif s[i-1] == "a" and s[i+1] == "?": s[i] = "b" elif s[i+1] == "?": s[i] = "a" elif (s[i-1] == "a" and s[i+1] == "b") or (s[i-1] == "b" and s[i+1] == "a"): s[i] = "c" elif "a" in (s[i-1],s[i+1]): s[i] = "b" else: s[i] = "a" return "".join(s) s = "hel??" print(solve(s))
อินพุต
"hel??"
ผลลัพธ์
helab