LeetCode 647,5刷题

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]

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值