利用栈设计算法,判断一个字符串S是否对称

stwwlo 2010-03-11 10:57:45
如果对称返回1,否则返回0. C++实现。

栈的ADT定义如下:
template<class T>
Class Stack{
public:

void clear(); //变为空栈
void push(const T item); //item入栈
T pop(); //返回栈顶内容并弹出
T top(); //返回栈顶内容但不弹出
bool isEmpty(); //若栈已空返回真
bool isFull(); //若栈已满返回真
}

万分感谢。
...全文
959 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
stwwlo 2010-03-11
  • 打赏
  • 举报
回复
回复内容太短了?什么意思?一楼中的代码是否还有其他情况需要判断?小白需要指点一二。THX
WizardOz 2010-03-11
  • 打赏
  • 举报
回复
一楼正解!回复内容太短了!
jiangxc2004 2010-03-11
  • 打赏
  • 举报
回复

int isSymStr(string &data)
{
int index=0;
Stack<char> charStack;
int len = data.length();
while (index++ < len/2)
charStack.push(data[index++]);
if(len%2) ++index;
while(index < len)
{
if (data[index++] != charStack.pop())
return 0;
}
return 1;
}
jiangxc2004 2010-03-11
  • 打赏
  • 举报
回复
谢谢指出,确实是有错误,改成:。
while (index < len/2)
charStack.push(data[index++]);

正确代码:

int isSymStr(string &data)
{
int index=0;
Stack<char> charStack;
int len = data.length();
while (index < len/2)
charStack.push(data[index++]);
if(len%2) ++index;
while(index < len)
{
if (data[index++] != charStack.pop())
return 0;
}
return 1;
}



[Quote=引用 5 楼 canoe982 的回复:]
while (index++ < len/2)
charStack.push(data[index++]);

这个循环似乎有问题啊。
一次循环index的值加了2!
[/Quote]
canoe982 2010-03-11
  • 打赏
  • 举报
回复
while (index++ < len/2)
charStack.push(data[index++]);

这个循环似乎有问题啊。
一次循环index的值加了2!
jiangxc2004 2010-03-11
  • 打赏
  • 举报
回复
如果考虑程序的健壮性的话,需要一些出错控制:
比如:
charStack.push(data[index++])
这里检查栈是否已满,检查的具体操作看你怎么实现栈的。如果你实现push的实现有检测栈满的情况,并且返回一个代表满的返回值。那么你就在这里检测返回值,并作相应的处理。
后面的出栈的部分也类似,

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧