Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 해당 인덱스에서 문자 c의 가장 가까운 거리를 보여주는 목록을 찾는 프로그램

<시간/>

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