回文字符串是具有回文特性的字符串:即该字符串从左向右读和从右向左读都一样,单独的字母不作为回文字符串,例如abcddcba即为一个长度为8的回文字符串。 编写一个程序,输入一个全是字母的字符串,找出字符串中最长的回文字符串,输出最长回文字符串的长度和最长的回文字符串(长度相同的输出第一个),若无回文字符串,只输出0。
时间: 2023-04-14 22:04:48 浏览: 160
回文字符串:判断一个是否是回文字符串。回文字符串是指正序(从左向右)和倒序(从右向左)读都是一样的字符串。
5星 · 资源好评率100%
可以使用中心扩展算法来解决这个问题。具体步骤如下:
1. 遍历字符串中的每个字符,以该字符为中心,向左右两边扩展,判断是否为回文字符串,记录最长的回文字符串。
2. 遍历字符串中每两个相邻字符之间的位置,以该位置为中心,向左右两边扩展,判断是否为回文字符串,记录最长的回文字符串。
3. 输出最长回文字符串的长度和最长的回文字符串。
如果字符串中没有回文字符串,则输出0。
代码如下:
```python
def longest_palindrome(s):
n = len(s)
if n < 2:
return n, s
max_len = 0
start = 0
for i in range(n):
# 以单个字符为中心扩展
l, r = i, i
while l >= 0 and r < n and s[l] == s[r]:
l -= 1
r += 1
if r - l - 1 > max_len:
max_len = r - l - 1
start = l + 1
# 以相邻字符之间的位置为中心扩展
l, r = i, i + 1
while l >= 0 and r < n and s[l] == s[r]:
l -= 1
r += 1
if r - l - 1 > max_len:
max_len = r - l - 1
start = l + 1
if max_len == 0:
return 0
else:
return max_len, s[start:start+max_len]
s = input("请输入一个全是字母的字符串:")
length, palindrome = longest_palindrome(s)
print("最长回文字符串的长度为:", length)
print("最长回文字符串为:", palindrome)
```
示例输入:
```
abcbadefg
```
示例输出:
```
最长回文字符串的长度为: 3
最长回文字符串为: bcb
```
阅读全文