给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。
示例 1:
输入: "abc"
输出: 3
解释: 三个回文子串: "a", "b", "c".
示例 2:
输入: "aaa"
输出: 6
说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".
分奇数和偶数,左右两个指针
class Solution:
def countSubstrings(self, s: str) -> int:
"""
:type s: str
:rtype: int
"""
count=0
for i in range(len(s)):
count+=1
#奇数
left=i-1
right=i+1
while left>=0 and right<len(s) and s[left]==s[right]:
count+=1
left-=1
right+=1
left=i
right=i+1
while left>=0 and right<len(s) and s[left]==s[right]:
count+=1
left-=1
right+=1
return count
给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
class Solution:
def longestPalindrome(self, s: str) -> str:
count=0
if s=='':
return ''
if len(s)==1:
return s
result=[]
cur=0
result1=[]
result2=[]
for i in range(len(s)):
#奇数
left=i-1
right=i+1
while left>=0 and right<len(s) and s[left]==s[right]:
count+=1
res=right-left
if res>cur:
cur=res
result1=s[left:right+1]
left-=1
right+=1
#偶数
left=i
right=i+1
while left>=0 and right<len(s) and s[left]==s[right]:
count+=1
res=right-left
if res>cur:
cur=res
result1=s[left:right+1]
left-=1
right+=1
if count>0:
return result1 if len(result1)>len(result2) else result2
else:
return s[0]