สมมติว่าเรามีสตริง s เราต้องหาความยาวของสตริงย่อยที่ยาวที่สุดระหว่างตัวอักษรหรือองค์ประกอบที่เท่ากันสองตัว ไม่รวมอักขระสองตัว หากเราไม่พบสตริงย่อยดังกล่าว ให้คืนค่า -1
ดังนั้น หากอินพุตเป็น s ="ระดับ" เอาต์พุตจะเป็น 3 เนื่องจากสตริงย่อยที่เหมาะสมที่สุดอาจเป็น "lev" หรือ "vel"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
บันทึก :=แผนที่ใหม่
-
สำหรับฉันในช่วง 0 ถึงขนาด s - 1 ทำ
-
ถ้า s[i] อยู่ในบันทึกแล้ว
-
ใส่ i ที่ท้ายบันทึก[s[i]]
-
-
มิฉะนั้น
-
memo[s[i]] :=รายการที่มีองค์ประกอบเดียว i
-
-
-
ดีที่สุด :=0
-
สำหรับแต่ละคีย์ในบันทึกช่วยจำ ให้ทำ
-
best :=maximum of best และ (องค์ประกอบสุดท้ายของ memo[key] - องค์ประกอบแรกของ memo[key])
-
-
ผลตอบแทนดีที่สุด - 1
ตัวอย่าง (Python)
def solve(s): memo = {} for i in range(len(s)): if s[i] in memo: memo[s[i]].append(i) else: memo[s[i]] = [i] best = 0 for key in memo: best = max(best, memo[key][-1] - memo[key][0]) return best - 1 s = "level" print(solve(s))
อินพุต
"level"
ผลลัพธ์
3