用C++栈和队列的基本操作设计用两种以上的算法来实现判断输入的字符串序列是否为回文
时间: 2024-01-22 17:17:57 浏览: 76
算法一:使用栈
1. 遍历输入的字符串,将每个字符依次压入栈中;
2. 再次遍历输入的字符串,每次将栈顶元素弹出并与当前字符比较,如果相同则继续比较,否则返回false;
3. 如果遍历完整个字符串后栈为空,则说明输入的字符串是回文,返回true,否则返回false。
时间复杂度为O(n),空间复杂度为O(n)。
以下是C++代码实现:
```c++
#include <iostream>
#include <stack>
#include <cstring>
using namespace std;
bool isPalindrome(string s) {
stack<char> st;
int len = s.size();
for (int i = 0; i < len; i++) {
st.push(s[i]);
}
for (int i = 0; i < len; i++) {
if (st.top() != s[i]) {
return false;
}
st.pop();
}
return true;
}
int main() {
string s;
cout << "请输入一个字符串:";
cin >> s;
if (isPalindrome(s)) {
cout << s << " 是回文字符串。" << endl;
} else {
cout << s << " 不是回文字符串。" << endl;
}
return 0;
}
```
算法二:使用队列
1. 遍历输入的字符串,将每个字符依次加入队列中;
2. 再次遍历输入的字符串,每次从队列头部取出一个字符并与当前字符比较,如果相同则继续比较,否则返回false;
3. 如果遍历完整个字符串后队列为空,则说明输入的字符串是回文,返回true,否则返回false。
时间复杂度为O(n),空间复杂度为O(n)。
以下是C++代码实现:
```c++
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
bool isPalindrome(string s) {
queue<char> q;
int len = s.size();
for (int i = 0; i < len; i++) {
q.push(s[i]);
}
for (int i = 0; i < len; i++) {
if (q.front() != s[i]) {
return false;
}
q.pop();
}
return true;
}
int main() {
string s;
cout << "请输入一个字符串:";
cin >> s;
if (isPalindrome(s)) {
cout << s << " 是回文字符串。" << endl;
} else {
cout << s << " 不是回文字符串。" << endl;
}
return 0;
}
```
阅读全文