回文是指正读反读均相同的字符序列,如”abba”和”abdba”均是回文,但”good”不是回文。试写一个算法判定给定的字符序列是否为回文。(提示:将一半字符入栈) 设计算法,
时间: 2024-10-21 18:12:43 浏览: 32
判断一个字符序列是否为回文的一种简单算法是使用两个指针,一个从头开始向后移动,另一个从尾部开始向前移动。同时,我们还可以利用栈的数据结构辅助这个过程。
1. 初始化两个指针,一个指向字符串的起始位置(i = 0),另一个指向字符串的结束位置(j = length - 1)。这里假设输入的字符串名为`str`,长度为`length`。
2. 创建一个空栈,用于存储中间的字符。
3. 当`i < j`时,继续循环:
a. 将当前尾部字符`str[j]`压入栈中。
b. 比较`str[i]`和`str[j]`,如果它们相等,则继续比较下一对;如果不等,说明不是回文,直接返回`false`。
c. i 自增1,j减1,继续下一个比较。
4. 如果所有对应位置的字符都匹配过了,并且栈不为空(表示我们已经检查了所有对称的部分),那么弹出栈顶的所有元素并与剩下的字符一一对应比较。只要有一对不匹配,就说明不是回文,返回`false`。
5. 如果所有的字符都匹配成功,即循环结束后栈为空或者栈顶元素与剩余的字符都匹配,那么说明原字符串是回文,返回`true`。
```python
def is_palindrome(s):
length = len(s)
if length <= 1:
return True
stack = []
for i in range(length // 2):
stack.append(s[length - 1 - i])
i = 0
j = length - 1
while i < j:
if s[i] != stack.pop():
return False
i += 1
j -= 1
# If the string has an odd number of characters, check the middle one.
if length % 2 == 1 and s[length // 2] != stack[-1]:
return False
return True
```
阅读全文