문자열 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]