สมมติว่าเรามีสตริง s เราต้องหาจำนวนสตริงย่อยที่ไม่ว่างที่ชัดเจนของ s
ดังนั้น หากอินพุตเป็น s ="abaa" ผลลัพธ์จะเป็น 8 เพราะสตริงย่อยคือ ["a", "b", "ab", "ba", "aa", "aba", " baa", "abaa"].
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ลอง :=แผนที่ใหม่
- n :=ขนาดของ s
- สำหรับฉันในช่วง 0 ถึง n - 1 ทำ
- curr :=พยายาม
- สำหรับ j ในช่วง i ถึง n - 1 ทำ
- c :=s[j]
- ถ้า c ไม่อยู่ในสกุลเงิน แล้ว
- curr[c] :=แผนที่ใหม่
- curr :=curr[c]
- curr["*"] :=จริง
- q :=สร้างคิวและแทรก trie
- ตอบ :=0
- ในขณะที่ q ไม่ว่าง ให้ทำ
- อัน :=ans + 1
- t :=เหลือรายการของ q และลบรายการนี้ออกจาก q
- สำหรับแต่ละ c ใน t ทำ
- ถ้า c ไม่เหมือนกับ "*" แล้ว
- ใส่ t[c] ต่อท้าย q
- ถ้า c ไม่เหมือนกับ "*" แล้ว
- ส่งคืน ans - 1
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
from collections import deque
def solve(s):
trie = {}
n = len(s)
for i in range(n):
curr = trie
for j in range(i, n):
c = s[j]
if c not in curr:
curr[c] = {}
curr = curr[c]
curr["*"] = True
q = deque([trie])
ans = 0
while q:
ans += 1
t = q.popleft()
for c in t:
if c != "*":
q.append(t[c])
return ans - 1
s = "abaa"
print(solve(s)) อินพุต
"abaa"
ผลลัพธ์
8