【技巧】No. 0647 回文子串【中等】👉力扣对应题目指路
希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦
欢迎关注、订阅专栏 【力扣详解】谢谢你的支持!
⭐ 题目描述:给你一个字符串 s ,请你统计并返回这个字符串中 回文子串
的数目
-
回文字符串 是正着读和倒过来读
一样
的字符串 -
子字符串 是字符串中的由
连续
字符组成的一个序列 -
示例 1:
输入:s = “abc”
输出:3
解释:三个回文子串: “a”, “b”, “c” -
示例 2:
输入:s = “aaa”
输出:6
解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”
🔥 思路:从每个潜在的回文中心位置出发,向两侧延展直至延展失败 (每成功延展一次则结果
+1
)
- 中心位置可能是一个 (对应奇数长度的回文串) or 两个 (对应偶数长度的回文串)
参考如上思路,给出详细步骤如下:
- 步骤一⭐编写延展函数:每成功延展一次则结果
+1
- 步骤二⭐遍历每个潜在的回文中心位置,调用延展函数处理
- 中心位置可能是一个 (对应奇数长度的回文串) or 两个 (对应偶数长度的回文串)
class Solution:
def countSubstrings(self, s: str) -> int:
def extend(left, right): # --------------------------- step 1
temp = 0
while left >= 0 and right <= len(s)-1 and s[left] == s[right]:
left -= 1
right += 1
temp += 1
return temp
# ----------------------------------------------------- step 2
result = 0
for s_idx, ss in enumerate(s):
result += extend(s_idx, s_idx) # 奇数对称
result += extend(s_idx, s_idx+1) # 偶数对称
return result
希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦
🔥 LeetCode 热题 HOT 100