利用“堆栈”和“队列”,对输入的一组“字符串”判断是否“回文
时间: 2023-10-28 07:06:08 浏览: 81
回文是指正反读都相同的字符串。利用堆栈和队列可以判断输入的字符串是否为回文。
具体思路如下:
1. 将输入的字符串转换为小写字母,去除空格和标点符号。
2. 将字符逐个压入堆栈中。
3. 同时将字符逐个加入队列中。
4. 比较堆栈和队列中弹出的字符是否相同,如果全部相同,则输入的字符串为回文,否则不是回文。
Python代码实现如下:
```python
def is_palindrome(s):
# 将字符串转换为小写字母,去除空格和标点符号
s = s.lower()
s = ''.join(c for c in s if c.isalnum())
# 利用堆栈和队列判断是否回文
stack = []
queue = []
for c in s:
stack.append(c)
queue.append(c)
while stack and queue:
if stack.pop() != queue.pop(0):
return False
return True
```
测试代码:
```python
print(is_palindrome("A man, a plan, a canal: Panama")) # True
print(is_palindrome("race a car")) # False
```
相关问题
利用“堆栈”和“队列”,对输入的一组“字符串”判断是否“回文”
可以使用栈和队列来进行字符串回文判断。
具体实现方法如下:
1. 将输入的字符串逐个字符入栈和队列中;
2. 出栈和出队列操作,得到栈底和队首的字符;
3. 判断栈底和队首的字符是否相同,若相同则继续操作,若不同则说明该字符串不是回文;
4. 重复以上操作,直到栈和队列为空,或者在判断过程中发现不同的字符。
代码实现如下(使用Python语言):
```python
def is_palindrome(s):
stack = []
queue = []
# 将字符串逐个字符入栈和队列
for ch in s:
stack.append(ch)
queue.append(ch)
# 出栈和出队列操作,比较栈底和队首的字符是否相同
while stack and queue:
if stack.pop() != queue.pop(0):
return False
return True
```
示例:
```python
s1 = "racecar" # 回文
s2 = "hello" # 非回文
print(is_palindrome(s1)) # True
print(is_palindrome(s2)) # False
```
C语言利用“堆栈”和“队列”,对输入的一组“字符串”判断是否“回文”
首先,我们需要了解什么是回文。回文就是正着读和倒着读都一样的字符串,比如“level”和“racecar”。
对于输入的一组字符串,可以使用堆栈和队列来判断是否回文。
堆栈是一种先进后出的数据结构,可以借助堆栈实现字符串的反转。我们可以将原始字符串中的每个字符依次入栈,然后再依次出栈,得到反转后的字符串。如果反转后的字符串与原始字符串相同,则说明该字符串是回文。
队列是一种先进先出的数据结构,可以借助队列实现字符串的正序。我们可以将原始字符串中的每个字符依次入队,然后再依次出队,得到正序的字符串。如果正序的字符串与原始字符串相同,则说明该字符串是回文。
下面是使用堆栈和队列判断字符串是否回文的示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
typedef struct {
char data[MAX_LEN];
int top;
} Stack;
typedef struct {
char data[MAX_LEN];
int head;
int tail;
} Queue;
void initStack(Stack *s) {
s->top = -1;
}
void push(Stack *s, char c) {
s->data[++s->top] = c;
}
char pop(Stack *s) {
return s->data[s->top--];
}
void initQueue(Queue *q) {
q->head = 0;
q->tail = -1;
}
void enqueue(Queue *q, char c) {
q->data[++q->tail] = c;
}
char dequeue(Queue *q) {
return q->data[q->head++];
}
int isPalindrome(char *str) {
int len = strlen(str);
Stack s;
Queue q;
int i;
initStack(&s);
initQueue(&q);
for (i = 0; i < len; i++) {
push(&s, str[i]);
enqueue(&q, str[i]);
}
for (i = 0; i < len; i++) {
if (pop(&s) != dequeue(&q)) {
return 0;
}
}
return 1;
}
int main() {
char str[MAX_LEN];
printf("请输入一个字符串: ");
scanf("%s", str);
if (isPalindrome(str)) {
printf("%s是回文字符串\n", str);
} else {
printf("%s不是回文字符串\n", str);
}
return 0;
}
```
在上面的代码中,我们定义了一个结构体类型`Stack`和`Queue`,分别表示堆栈和队列。`isPalindrome`函数用于判断字符串是否回文。首先,我们将字符串中的每个字符依次压入堆栈和队列中。然后,我们依次弹出堆栈中的字符和出队列中的字符,并比较它们是否相等。如果全部相等,则说明该字符串是回文。
在`main`函数中,我们输入一个字符串,并调用`isPalindrome`函数判断该字符串是否回文。如果是回文,则输出“是回文字符串”,否则输出“不是回文字符串”。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)