문자열 s가 있다고 가정하고 s에서 회문 부분 문자열의 수를 찾아야 합니다.
따라서 입력이 s ="level"과 같으면 회문 하위 문자열이 ["l","e","v","e","l","eve"이므로 출력은 7이 됩니다. ,"레벨"]
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- check_palindrome() 함수를 정의합니다. 이것은 문자열, 왼쪽, 오른쪽이 필요합니다.
- ans :=0
- 왼쪽>=0이고 오른쪽
- s[left]가 s[right]와 같으면
- ans :=ans + 1
- 왼쪽 :=왼쪽 - 1
- 오른쪽 :=오른쪽 + 1
- 그렇지 않으면
- 반환
- s[left]가 s[right]와 같으면
- ans :=ans + check_palindrome(s, char_index - 1, char_index + 1)
- ans :=ans + check_palindrome(s, char_index, char_index + 1)
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
class Solution: def solve(self, s): def check_palindrome(string, left, right): ans = 0 while left >= 0 and right < len(s): if s[left] == s[right]: ans += 1 left -= 1 right += 1 else: return ans return ans ans = 0 for char_index in range(len(s)): ans += check_palindrome(s, char_index - 1, char_index + 1) ans += check_palindrome(s, char_index, char_index + 1) return (ans) + len(s) ob = Solution() print(ob.solve("level"))
입력
"level"
출력
7