使用栈和队列,判断字符串是否为回文
时间: 2024-09-27 10:09:59 浏览: 65
栈和队列可以用来判断一个字符串是否为回文,因为它们分别支持后进先出(LIFO)和先进先出(FIFO)的操作特性。以下是基本步骤:
1. **使用栈**:
- 将字符串的一半字符逐个压入栈中。
- 另一半字符逐个读取并与栈顶元素比较。
- 如果所有对应位置的字符都相等,则字符串是回文;如果栈空而还有剩余字符未比较,说明不是回文。
2. **使用队列**(双端队列,如Python的deque):
- 同样将字符串的一半字符放入队列。
- 从队列头部开始取出字符并与另一半对应的字符比较。
- 如果所有字符匹配,则字符串是回文;如果不匹配则结束检查。
```python
from collections import deque
def is_palindrome(s):
stack = []
queue = deque()
# 把字符串的一半压入栈和队列
for i in range(len(s) // 2):
stack.append(s[i])
queue.appendleft(s[i])
# 比较另一半字符
if len(s) % 2 == 0: # 偶数长度的字符串
while len(stack) > 0 and len(queue) > 0:
if stack.pop() != queue.pop():
return False
else: # 奇数长度的字符串
while len(stack) > 0 and len(queue) > 0:
if stack.pop() != queue.pop():
return False
if s[len(s) // 2] != queue.pop(): # 中间的字符也需要单独比较
return False
return True
# 测试
print(is_palindrome("aba")) # 输出: True
print(is_palindrome("abba")) # 输出: True
print(is_palindrome("abc")) # 输出: False
```
阅读全文