문자열 s와 다른 문자 c가 있다고 가정하고 c는 s에 있어야 합니다. 길이가 s의 길이와 같은 목록을 찾아야 합니다. 여기서 각 인덱스 i에 대해 값은 s[i]의 가장 가까운 거리로 설정됩니다. 다.
따라서 입력이 s ="ppqppq" c ="q"와 같으면 출력은 [2, 1, 0, 1, 1, 0]
이 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
j :=s
의 크기 -
d :=[j - 1] * j
-
x :=s의 c 인덱스
-
범위 0에서 j - 1에 있는 i에 대해 수행
-
s[i]가 c와 같고 i> x이면
-
x :=나, 인드 :=1
-
다음을 반복합니다.
-
d[x - ind]> ind이면
-
d[x - ind] :=ind
-
-
그렇지 않으면
-
루프에서 나오다
-
-
인드 :=인드 + 1
-
-
-
d[i] :=|x - i|
-
-
리턴 d
예시
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
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)) 입력
"ppqppq", "q"
출력
[2, 1, 0, 1, 1, 0]