สมมติว่าเรามีสตริง s ที่มีอักขระเพียงสามตัว 'a', 'b' และ 'c' เราจะใช้อัลกอริทึมต่อไปนี้กับสตริงกี่ครั้งก็ได้ -
-
เลือกคำนำหน้าที่ไม่เว้นว่างจาก s โดยที่อักขระทั้งหมดในคำนำหน้าเหมือนกัน
-
เลือกคำต่อท้ายที่ไม่เว้นว่างจาก s โดยที่อักขระทั้งหมดในส่วนต่อท้ายเหมือนกัน
-
คำนำหน้าและส่วนต่อท้ายไม่ปะติดปะต่อกัน
-
อักขระจากคำนำหน้าและคำต่อท้ายต้องเหมือนกัน
-
ลบทั้งคำนำหน้าและส่วนต่อท้ายออกจาก s
สุดท้าย เราต้องค้นหาความยาวต่ำสุดของ s หลังจากดำเนินการดังกล่าวเป็นจำนวนเท่าใดก็ได้ (อาจเป็นศูนย์ครั้ง)
ดังนั้นหากอินพุตเป็น s ="aabccabba" ผลลัพธ์จะเป็น 3 เพราะในตอนแรกเราสามารถเลือกคำนำหน้า ="aa" และคำต่อท้าย ="a" เพื่อให้สตริงหลังการลบเป็น "bccabb" ได้ select prefix ="b" และ suffix "bb" ดังนั้น string หลังการลบคือ "cca" ซึ่งมีความยาว 3
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
s :=จัดคิวด้วย s
-
ในขณะที่ขนาดของ s> 1 และ s[0] เป็นองค์ประกอบสุดท้ายของ s ให้ทำ
-
chk :=s[0]
-
ในขณะที่ s และ s[0] เหมือนกัน ทำ
-
ลบองค์ประกอบด้านซ้ายออกจาก s
-
-
ในขณะที่ s ไม่ว่างและองค์ประกอบสุดท้ายของ s เหมือนกับ chk ให้ทำ
-
ลบองค์ประกอบสุดท้ายออกจาก s
-
-
-
ขนาดส่งคืนของ s
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
from collections import deque def solve(s): s = deque(s) while len(s) > 1 and s[0] == s[-1]: chk = s[0] while s and s[0] == chk: s.popleft() while s and s[-1] == chk: s.pop() return len(s) s = "aabccabba" print(solve(s))
อินพุต
"aabccabba"
ผลลัพธ์
3