ปัญหา
ให้สตริง s หาจำนวนสตริงย่อยที่เป็น "homogenous" (ตัวอักษรทุกตัวเหมือนกัน) ผลลัพธ์ modulo 10^9+7
ตัวอย่าง
s = "xyyzzzxx" → ผลลัพธ์ 13 เพราะมี: "x" 3 ครั้ง, "xx" 1 ครั้ง, "y" 2 ครั้ง, "yy" 1 ครั้ง, "z" 3 ครั้ง, "zz" 2 ครั้ง, "zzz" 1 ครั้ง (รวม 3+1+2+1+3+2+1=13)
ขั้นตอนการแก้ปัญหา
s := s + "@"(เพื่อจัดการตัวสุดท้าย)h := map ใหม่,prev := s[0],c := 1- วนลูป
iในs[1:]:- ถ้า
prev != i:- อัปเดต
h[prev*c](เพิ่ม 1 หรือตั้งค่า 1) c := 1
- อัปเดต
- ถ้า
prev == i:c += 1 prev := i
- ถ้า
fin := 0- สำหรับแต่ละ
keyในh:t := len(key),k := 0- بينما
t != 0:k += t; t -= 1 fin += k * h[key]
- คืน
fin % 1000000007
การนำไปใช้งาน (Python)
def solve(s):
s += "@"
h = {}
prev = s[0]
c = 1
for i in s[1:]:
if prev != i:
if prev * c in h:
h[prev * c] += 1
else:
h[prev * c] = 1
c = 1
if prev == i:
c += 1
prev = i
fin = 0
for key in h:
t = len(key)
k = 0
while t != 0:
k += t
t -= 1
fin += k * h[key]
return fin % 1000000007
s = "xyyzzzxx"
print(solve(s))
อินพุต
"xyyzzzxx"
เอาต์พุต
13