LeetCode647,5刷题

    xiaoxiao2023-09-27  161

    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]

     

     

    最新回复(0)