647. 回文子串
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。
示例 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
5. 最长回文子串
给定一个字符串 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]