소문자 문자열(모두 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