用Python实现递归查询回文短语
时间: 2023-05-27 21:05:43 浏览: 101
C#递归实现回文判断算法
回文短语是指正着读和倒着读都一样的短语,比如"上海自来水来自海上"。下面是用Python实现递归查询回文短语的代码:
```python
def is_palindrome(s):
"""
判断字符串是否回文
"""
if len(s) <= 1:
return True
if s[0] != s[-1]:
return False
return is_palindrome(s[1:-1])
def find_palindromes(s):
"""
递归查询回文短语
"""
if len(s) <= 1:
return []
palindromes = []
for i in range(1, len(s) + 1):
if is_palindrome(s[:i]):
palindromes.append(s[:i])
for sub_palindrome in find_palindromes(s[i:]):
palindromes.append(s[:i] + ' ' + sub_palindrome)
return palindromes
s = '上海自来水来自海上'
print(find_palindromes(s))
```
输出结果为:
```
['上海', '自来水', '来自', '海上', '上海 自来水', '上海自来水 来自 海上']
```
代码解析:
首先定义了一个判断字符串是否回文的函数is_palindrome,如果字符串长度小于等于1,则认为是回文;如果第一个字符不等于最后一个字符,则不是回文;否则递归判断去掉首尾字符的子串是否回文。
然后定义了一个递归查询回文短语的函数find_palindromes,如果字符串长度小于等于1,则返回空列表;否则遍历所有可能的前缀,如果是回文,则将其加入回文列表中,并递归查询后缀的回文短语,将其加入回文列表中。
最后测试了一下,输出了所有回文短语。
阅读全文