回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符序列是否为回文。(提示:将一半字符入栈)
时间: 2023-05-29 22:03:46 浏览: 134
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
5星 · 资源好评率100%
可以使用栈来解决此问题。首先将字符序列的前一半字符入栈,然后依次取出栈中的字符与字符序列的后一半字符比较,如果都相同则是回文,否则不是回文。
具体实现如下:
1. 首先定义一个栈和一个指针变量。
2. 将字符序列的前一半字符入栈,直到指针变量指向字符序列的中间位置。
3. 如果字符序列长度为奇数,则指针变量需要向后移动一个字符。
4. 依次取出栈中的字符与字符序列的后一半字符比较,如果都相同则继续比较下一个字符,否则不是回文。
5. 如果比较完所有字符都相同,则是回文,否则不是回文。
具体代码如下:
```
bool isPalindrome(char* s) {
int len = strlen(s);
int mid = len / 2;
stack<char> stk;
for (int i = 0; i < mid; i++) {
stk.push(s[i]);
}
if (len % 2 == 1) {
mid++;
}
for (int i = mid; i < len; i++) {
if (stk.top() != s[i]) {
return false;
}
stk.pop();
}
return true;
}
```
该算法的时间复杂度为O(n),空间复杂度为O(n/2)。
阅读全文