帮我写一个代码,设计一个算法利用顺序栈判断一个字符串是否是对称串。所谓对称串是指从左向右读和从右向左读的序列相同。
时间: 2024-05-19 19:12:28 浏览: 86
好的,以下是对称串判断算法的代码实现:
#include <iostream>
#include <stack>
#include <string>
using namespace std;
bool isSymmetric(string str) {
stack<char> s;
int n = str.size();
// 将字符串前半部分入栈
for (int i = 0; i < n / 2; i++) {
s.push(str[i]);
}
// 若字符串长度为奇数,跳过中间的字符
if (n % 2 == 1) {
i++;
}
// 依次出栈,与后半部分的字符比较
for (; i < n; i++) {
if (s.empty() || s.top() != str[i]) {
return false;
} else {
s.pop();
}
}
return true;
}
int main() {
string str = "racecar";
if (isSymmetric(str)) {
cout << str << " is a symmetric string" << endl;
} else {
cout << str << " is not a symmetric string" << endl;
}
return 0;
}
该算法利用了顺序栈的后进先出特性,将字符串的前半部分入栈,并与字符串的后半部分逐个字符比较,若全部匹配,则该字符串为对称串。
希望能够帮到您,如果您还有其他问题,请继续提出。
阅读全文