📅  最后修改于: 2023-12-03 15:08:05.427000             🧑  作者: Mango
本文介绍如何在给定的字符串数组中查找所有的回文字符串。回文字符串是反转后与原字符串相同的字符串,例如:"aba"、"radar"等。本文给出了两种方法:暴力法和中心扩展法。
暴力法是最简单直接的方法,我们可以枚举所有的子串,并判断其是否为回文字符串。
def brute_force(strs):
res = []
for s in strs:
for i in range(len(s)):
for j in range(i, len(s)):
if s[i:j+1] == s[i:j+1][::-1]:
res.append(s[i:j+1])
return res
该算法的时间复杂度为$O(n^3)$,需要枚举所有的子串,同时需要判断每个子串是否为回文字符串。
中心扩展法是一种更快速的方法,我们可以枚举回文字符串的中心,并向左右两个方向扩展,直到不再满足回文字符串的条件为止。
def center_expansion(strs):
res = []
for s in strs:
for i in range(len(s)):
# 以i为中心,回文串长度为奇数的情况
l, r = i, i
while l >=0 and r < len(s) and s[l] == s[r]:
res.append(s[l:r+1])
l -= 1
r += 1
# 以i和i+1为中心,回文串长度为偶数的情况
l, r = i, i+1
while l >=0 and r < len(s) and s[l] == s[r]:
res.append(s[l:r+1])
l -= 1
r += 1
return res
该算法的时间复杂度为$O(n^2)$,只需要枚举回文字符串的中心,并向左右两个方向扩展。
本文介绍了两种查找所有回文字符串的方法:暴力法和中心扩展法。暴力法时间复杂度为$O(n^3)$,中心扩展法时间复杂度为$O(n^2)$。在应用中心扩展法时,需要注意回文串长度为奇数和偶数两种情况。