1、题目如下:
2、个人Python代码实现:
首先想到的是通过类似冒泡排序的方式进行切片,然后判断切片的子字符串是否为回文字符串,然后记录出最长的回文字符串,代码如下:
可以看到,通过切片的方式,在字符串长度只有1的时候,会报错。当然,这里可以,我的第一反应也是通过if...else判断字符串长度就行,但是突然想到可以使用另外一种方式进行控制:
不管是第一种切片还是第二种,其实循环的本质我个人认为跟冒泡是一样的,最后提交代码如下:
class Solution:
def longestPalindrome(self, s: str) -> str:
out_put = '' #out_put为输出
while s: #当字符串s不为空时
temp = '' #temp为子字符串
for i in s: #遍历字符串s,将子字符依次加入temp中
temp += i
#当temp长度大于out_put且temp为回文字符串时,将temp赋值给out_put
if len(temp) > len(out_put) and temp == temp[::-1]:
out_put = temp
#删除字符串s第一个字符
s = s[1:]
return out_put
#本代码两段循环个人理解为冒泡排序的变种,暂做以下解释:
#外循环while用于判断字符串s中是否含有字符,当每一次内循环结束以后,删除字符串s的第1个字符,开始下一次内循环
#内循环for用于记录从当前下标(此处下标可以理解为初始值为0,每一次外循环后下标+1)开始后的可能存在的回文子串
#以s = "abcd"为例
#第一次while循环,是从a开始,依次判断a、ab、abc、abcd是否为回文字符串,在内循环中temp的值也依次为a、ab、abc、abcd,下同;
#第二次while循环,是从b开始,依次判断b、bc、bcd是否为回文字符串,以此类推,执行四次循环