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

Python에서 정렬된 형식으로 문자열의 회문 하위 문자열 수 찾기


소문자 문자열(모두 ASCII 문자임)이 있다고 가정하면 주어진 문자열의 고유한 연속 회문 하위 문자열을 모두 찾아야 합니다.

따라서 입력이 "level"과 같으면 7개의 하위 문자열 ['level', 'eve', 'l', 'e', ​​'v', 'e', ​​'l')이 있으므로 출력은 7이 됩니다. ].

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • N :=26

  • n :=str의 길이

  • 합계 :=0

  • my_map :=크기가 N이고 0으로 채워진 목록

  • 0에서 n 사이의 i에 대해 수행

    • my_map[(str[i])의 ASCII - ('a')의 ASCII ] :=my_map[(str[i])의 ASCII - ('a')의 ASCII ] + 1

  • 범위 0에서 N까지의 i에 대해 수행

    • my_map[i]이 0이 아니면

      • 합계 :=합계 +(my_map[i] *(my_map[i] + 1) / 2)

  • 반환 합계

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

N = 26
def all_palindrome_substr_count(str):
   n = len (str)
   sum = 0
   my_map = [0] * N
   for i in range(n):
      my_map[ord(str[i]) - ord('a')] += 1
  for i in range(N) :
      if (my_map[i]):
         sum += (my_map[i] * (my_map[i] + 1) // 2)
   return sum
str = "level"
print (all_palindrome_substr_count(str))

입력

"level"

출력

7