又是一早上,总算理清了思路,这个题确实有点绕,不过有了经验以后就怎么做了。
上代码
# 找出最先出现的最长回文串 (“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串)
class Solution:
def __init__(self) -> None:
pass
def solution(self, str_):
result = None
a = [] # 设置一个空列表,用来装所有的回文字符片段
if len(str_) <= 1: # 如果输入的空字符串或是就一个字符,那结果就是它自己
return result
else:
for j in range(1+len(str_)): # 设置开始的第一个字符开始循环查找
for i in range(j, 1+len(str_)): # 遍历整个字符串
if str_[j:i+1] == str_[j:i+1][::-1]: # 判断字符串是否是回文字,要注意的是切片和反向索引要区分开
a.append(str_[j:i+1]) # 把回文字符串添加进列表里
# print(a)
num = 0 # 设置一个数,用来计算回文字符串的长度
for i in range(len(a)): # 遍历列表
if len(a[i]) > num: # 判断字符串长度,如果比前面的长就替换掉
num = len(a[i])
result = a[i]
# print(result)
return result
if __name__ == "__main__":
str_ = input().strip() # 输入的是一个字符串,去掉了两端的空格
# print(str_)
sol = Solution()
result = sol.solution(str_)
print(result)
这个程序确实有几处需要注意的地方,在代码里已经标注。
这个程序还可以改成找最后一个最长回文字符串,而且还可以判断有没有回文字符串