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、知识点:字符串逆序
这个点我经常会忘记怎么处理,所以这里一并做个笔记。常用的方式如下: