力扣题库刷题笔记647-回文子串

1、题目如下:

2、个人Python代码实现

 

         思路如下:

        a、以切片的形式,判断每个子字符串是否为回文字符串。这里如何确定切片的起始下标就很重要了

        b、首先需要知道的是字符串s,s[i,j],指的是从下标i开始,到下标s[j-1]为止。例如s = '123456789', s[2,5]指的是下标为2开始,下标4截至,即345。所以进行切片时,在最后的循环中,需要切片到len(s) + 1才行

        c、其次,起始下标相对简单,通过第一个for循环遍历,用i做起始下标

        d、然后确定终止下标,终止下标用第2个for循环,用i+j作为终止下标进行切片。这里让我不断调试的点在于确定第2个for循环的循环次数。首先是,空字符串逆序后也是空字符串,所以需要排除空字符串的干扰,所以i+j一定要大于i,j必须从1开始循环。最后,由于i+j的最大值一定是字符串长度+1(原因见b,这样才能使得在每一次外循环的最后一次循环,切片为s[i:len(s)+1],也就是等价于s[i:])。这一句话可以转移为: i+j的最大值为len(s) + 1,所以内部循环的循环次数就是len(s)+1-i。

        代码如下:

class Solution:

    def countSubstrings(self, s: str) -> int:

        ans = 0                                             #用于输出结果

        for i in range(len(s)):                             #用于确定切片的起始下标

            for j in range(1, len(s)+1-i):                  #用于确定切片的终止下标

                if s[i:i+j] == s[i:i+j][::-1]:              #当切片字符串与其逆序的字符串相同时,就是回文字符串,此时ans+1

                    ans += 1

        return ans

3、知识点:字符串逆序

        这个点我经常会忘记怎么处理,所以这里一并做个笔记。常用的方式如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值