Giả sử chúng ta có một chuỗi s và một ký tự khác c, c phải có trong s, chúng ta phải tìm một danh sách có độ dài bằng độ dài của s, trong đó đối với mỗi chỉ số i giá trị của nó được đặt khoảng cách gần nhất của s [i] tới c.
Vì vậy, nếu đầu vào là s ="ppqppq" c ="q", thì đầu ra sẽ là [2, 1, 0, 1, 1, 0]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
j:=kích thước của s
-
d:=[j - 1] * j
-
x:=chỉ số của c trong s
-
đối với tôi trong phạm vi từ 0 đến j - 1, thực hiện
-
nếu s [i] giống với c và i> x thì
-
x:=i, ind:=1
-
lặp qua phần sau, thực hiện
-
nếu d [x - ind]> ind, thì
-
d [x - ind]:=ind
-
-
nếu không,
-
đi ra từ vòng lặp
-
-
ind:=ind + 1
-
-
-
d [i]:=| x - i |
-
-
trở lại d
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn
def solve(s, c):
j = len(s)
d = [j - 1] * j
x = s.index(c)
for i in range(j):
if s[i] == c and i > x:
x = i
ind = 1
while True:
if d[x - ind] > ind:
d[x - ind] = ind
else:
break
ind += 1
d[i] = abs(x - i)
return d
s = "ppqppq"
c = "q"
print(solve(s, c)) Đầu vào
"ppqppq", "q"
Đầu ra
[2, 1, 0, 1, 1, 0]